2016-09-21 2 views
35
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {} 

Ich möchte deviceToken bespannenswift 3.0 Daten zu String?

aber:

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

str ist nil

swift 3.0

, wie ich data zu string lassen kann?

enter link description here

nicht funktioniert und die Antwort ist vor ein paar Monaten hatte ich es versuchen: enter image description here

und Druck: enter image description here

bitte !!! Versuchen Sie zuerst, dann antworten

+6

nächste Mal, wenn Sie jemanden fragen Sie Ihren Code stellen Sie sicher, zu versuchen, es nicht als Bild eingefügt ist .. – Desdenova

+0

Wenn jemand über diese kommt, wenn eine Datei zu lesen, prüfen, ob die Die Datei ist UTF8-codiert: 'file -I/path/to/file.txt'. Wenn nicht konvertieren mit iconv: 'iconv -f UTF-16LE -t UTF-8 /pfad/zu/datei.txt>/pfad/zu/utf8/datei.txt' –

Antwort

9

Ich habe den Weg gefunden, es zu tun. Sie müssen Data-NSData konvertieren:

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

welches characterSet ist das? – Kingalione

65

ich nach der Antwort suchend auf die bekam Swift 3 Daten zu String Frage und nie eine gute Antwort kam. Nach einigem herum täuschen Ich kam auf diese:

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

Ich habe versucht du antwortest. Es funktionierte in anderen Funktionen, aber nicht in 'func-Anwendung (_ Anwendung: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)' .Ich weiß nicht warum? –

+0

das Gerät Token ist keine utf8 Zeichenfolge, es ist rohe binäre – Hogdotmac

+0

so was zu tun, wenn es rohe binäre ist? – Kingalione

7
let str = deviceToken.map { String(format: "%02hhx", $0) }.joined() 
-1

Versuchen zu verwenden:

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)") 
} 
0

auf die Antwort von weijia.wang zu verlängern:

extension Data { 
    func hexString() -> String { 
     let nsdataStr = NSData.init(data: self) 
     return nsdataStr.description.trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "") 
    } 
} 

es verwenden mit deviceToken.hexString()

1

Dies ist viel einfacher in Swift 3 und später mit reduce:

6

hier ist meine Datenerweiterung. fügen Sie diese und Sie können data.ToString nennen()

import Foundation 

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

@Moritz danke für deine korrektur – luhuiya