96 votes

swift 3.0 Données en chaîne?

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {}

Je veux deviceToken chaîne

mais:

let str = String.init(data: deviceToken, encoding: .utf8)

str est nil

swift 3.0

comment puis-je informer data de string ?

L'inscription pour les Notifications Push dans Xcode 8/Swift 3.0? pas de travail, et la réponse est il y a quelques mois, j'avais essayé ça:

enter image description here

et imprimer:

enter image description here

168voto

4redwings Points 1186

Je suis venu chercher la réponse à la question Swift 3 Data to String et je n'ai jamais eu de bonne réponse. Après quelques bêtises, j'ai trouvé ceci:

 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!
 

39voto

luhuiya Points 23

voici mon extension de données. ajoutez ceci et vous pourrez appeler data.ToString ()

 import Foundation

extension Data
{
    func toString() -> String?
    {
        return String(data: self, encoding: .utf8)
    }
}
 

19voto

Hogdotmac Points 149
let str = deviceToken.map { String(format: "%02hhx", $0) }.joined()

7voto

weijia.wang Points 805

J'ai trouvé le moyen de le faire. Vous devez convertir Data en NSData :

 let characterSet = CharacterSet(charactersIn: "<>")
let nsdataStr = NSData.init(data: deviceToken)
let deviceStr = nsdataStr.description.trimmingCharacters(in: characterSet).replacingOccurrences(of: " ", with: "")
print(deviceStr)
 

2voto

Gargoyle Points 438

C’est beaucoup plus facile dans Swift 3 et les versions ultérieures en utilisant

 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()
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X