Подтвердить что ты не робот

Данные 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?

введите ссылку здесь

не работает, и ответ несколько месяцев назад я попробовал: введите описание изображения здесь

и напечатать: введите описание изображения здесь

Пожалуйста, попробуйте сначала, затем ответьте

4b9b3361

Ответ 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()

Ответ 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)")
}