func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {}
Chcę deviceToken
sznurować
ale:
let str = String.init(data: deviceToken, encoding: .utf8)
str
jest nil
swift 3.0
Jak mogę pozwolić data
, aby string
?
Rejestracja w celu korzystania z powiadomień push w Xcode 8 / Swift 3.0? nie działa, a odpowiedź brzmi kilka miesięcy temu, próbowałem:
i wydrukuj:
file -I /path/to/file.txt
. Jeśli nie konwertujesz za pomocą iconv:iconv -f UTF-16LE -t UTF-8 /path/to/file.txt > /path/to/utf8/file.txt
Odpowiedzi:
Szukałem odpowiedzi na pytanie Swift 3 Data to String i nigdy nie uzyskałem dobrej odpowiedzi. Po kilku wygłupach wymyśliłem to:
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!
źródło
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
Nie wiem dlaczego?oto moje rozszerzenie danych. dodaj to i możesz wywołać data.ToString ()
import Foundation extension Data { func toString() -> String? { return String(data: self, encoding: .utf8) } }
źródło
let str = deviceToken.map { String(format: "%02hhx", $0) }.joined()
źródło
Znalazłem sposób, aby to zrobić. Musisz przekonwertować
Data
naNSData
:let characterSet = CharacterSet(charactersIn: "<>") let nsdataStr = NSData.init(data: deviceToken) let deviceStr = nsdataStr.description.trimmingCharacters(in: characterSet).replacingOccurrences(of: " ", with: "") print(deviceStr)
źródło
Jest to znacznie łatwiejsze w Swift 3 i późniejszych przy użyciu redukuj:
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() } }
źródło
Wersja Swift 4 odpowiedzi 4redwings:
let testString = "This is a test string" let somedata = testString.data(using: String.Encoding.utf8) let backToString = String(data: somedata!, encoding: String.Encoding.utf8)
źródło
Możesz również użyć
let data = String(decoding: myStr, as: UTF8.self)
tutaj zasobu na temat konwersji danych na ciągźródło
Aby rozszerzyć odpowiedź z weijia.wang:
extension Data { func hexString() -> String { let nsdataStr = NSData.init(data: self) return nsdataStr.description.trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "") } }
używaj go z
deviceToken.hexString()
źródło
Jeśli Twoje dane są zakodowane w formacie base64.
if ( dataObj != nil ) { let encryptedDataText = dataObj!.base64EncodedString(options: NSData.Base64EncodingOptions()) NSLog("Encrypted with pubkey: %@", encryptedDataText) }
źródło
Zgodnie z dokumentem Apple poniżej, token urządzenia nie może zostać zdekodowany. Więc myślę, że najlepszą rzeczą do zrobienia jest po prostu zostawienie tego.
źródło
let urlString = baseURL + currency if let url = URL(string: urlString){ let session = URLSession(configuration: .default) let task = session.dataTask(with: url){ (data, reponse, error) in if error != nil{ print(error) return } let dataString = String(data: data!, encoding: .utf8) print(dataString) } task.resume() }
źródło
dla szybkiego 5
let testString = "This is a test string" let somedata = testString.data(using: String.Encoding.utf8) let backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String? print("testString > \(testString)") //testString > This is a test string print("somedata > \(String(describing: somedata))") //somedata > Optional(21 bytes) print("backToString > \(String(describing: backToString))") //backToString > Optional("This is a test string")
źródło