swift 3.0 данные в строку?
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {}
Я хочу deviceToken
в строку
но:
let str = String.init(data: deviceToken, encoding: .utf8)
str
- это nil
swift 3.0
как я могу позволить data
до string
?
не работает, и ответ несколько месяцев назад, я попробовал его:
пожалуйста!!!Попробуйте сначала, а затем ответить
8 ответов:
Я пришел в поисках ответа на Swift 3 Data to String question и никогда не получал хорошего ответа. После некоторого дурачества я придумал это:
var testString = "This is a test string" var somedata = testString.data(using: String.Encoding.utf8) var backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String!
вот мое расширение данных. добавьте это, и вы можете вызвать данные.ToString ()
import Foundation extension Data { func toString() -> String { return String(data: self, encoding: .utf8)! } }
Я нашел способ сделать это. Вам нужно конвертировать
Data
toNSData
:let characterSet = CharacterSet(charactersIn: "<>") let nsdataStr = NSData.init(data: deviceToken) let deviceStr = nsdataStr.description.trimmingCharacters(in: characterSet).replacingOccurrences(of: " ", with: "") print(deviceStr)
Это намного проще в Swift 3 и позже с помощью reduce:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let token = deviceToken.reduce("") { + String(format: "%02x", ) } DispatchQueue.global(qos: .background).async { let url = URL(string: "https://example.com/myApp/apns.php")! var request = URLRequest(url: url) request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.httpMethod = "POST" request.httpBody = try! JSONSerialization.data(withJSONObject: [ "token" : token, "ios" : UIDevice.current.systemVersion, "languages" : Locale.preferredLanguages.joined(separator: ", ") ]) URLSession.shared.dataTask(with: request).resume() } }
распространить на ответ weijia.Ван:
extension Data { func hexString() -> String { let nsdataStr = NSData.init(data: self) return nsdataStr.description.trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "") } }
использовать его с
deviceToken.hexString()
согласно официальному документу apple, маркер устройства не может быть декодирован. Так что, я думаю, лучше всего просто оставить все как есть.
Ссылка: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html в разделе Архитектура безопасности