Данные 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
?
введите ссылку здесь
не работает, и ответ несколько месяцев назад я попробовал:
![введите описание изображения здесь]()
и напечатать:
![введите описание изображения здесь]()
Пожалуйста, попробуйте сначала, затем ответьте
Ответы
Ответ 1
Я нашел способ сделать это. Вам нужно преобразовать Data
в NSData
:
let characterSet = CharacterSet(charactersIn: "<>")
let nsdataStr = NSData.init(data: deviceToken)
let deviceStr = nsdataStr.description.trimmingCharacters(in: characterSet).replacingOccurrences(of: " ", with: "")
print(deviceStr)
Ответ 2
Я приступил к поиску ответа на вопрос Swift 3 Data to String и не получил хорошего ответа. После некоторого дурака я придумал это:
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!
Ответ 3
let str = deviceToken.map { String(format: "%02hhx", $0) }.joined()
Ответ 4
Это намного проще в Swift 3 и позже с помощью сокращения:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.reduce("") { $0 + String(format: "%02x", $1) }
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()
}
}
Ответ 5
Чтобы расширить ответ от weijia.wang:
extension Data {
func hexString() -> String {
let nsdataStr = NSData.init(data: self)
return nsdataStr.description.trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "")
}
}
используйте его с deviceToken.hexString()
Ответ 6
В соответствии с яблочным оффициальным документом маркер устройства не может декодироваться. Итак, я думаю, что лучше всего просто оставить это.
LINK: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html
в разделе Архитектура безопасности
![введите описание изображения здесь]()
Ответ 7
вот мое расширение. добавьте это, и вы можете вызвать data.ToString()
import Foundation
extension Data
{
func toString() -> String
{
return String(data: self, encoding: .utf8)!
}
}
Ответ 8
Попробуйте использовать:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
var deviceToken: String = token.description()
deviceToken = deviceToken.replacingOccurrences(of: "<", with: "")
deviceToken = deviceToken.replacingOccurrences(of: ">", with: "")
deviceToken = deviceToken.replacingOccurrences(of: " ", with: "")
print("Token: \(deviceToken)")
}