[swift] 신속한 3.0 데이터를 문자열로?

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

나는 deviceToken끈을 원한다

그러나:

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

str 이다 nil

스위프트 3.0

내가 어떻게 할 수 datastring?

Xcode 8 / Swift 3.0에서 푸시 알림에 등록 하시겠습니까?
작동하지 않고 대답은 몇 달 전에 시도했습니다.

여기에 이미지 설명 입력

및 인쇄 :

여기에 이미지 설명 입력



답변

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!


답변

여기 내 데이터 확장이 있습니다. 이것을 추가하면 data.ToString ()을 호출 할 수 있습니다.

import Foundation

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


답변

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


답변

나는 그것을 할 방법을 찾았다. 당신은 변환 할 필요가 DataNSData:

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


답변

이는 Swift 3 이상에서 reduce를 사용하여 훨씬 더 쉽습니다.

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


답변

4redwings의 답변의 Swift 4 버전 :

let testString = "This is a test string"
let somedata = testString.data(using: String.Encoding.utf8)
let backToString = String(data: somedata!, encoding: String.Encoding.utf8)


답변

let data = String(decoding: myStr, as: UTF8.self)여기에서 데이터를 문자열로 변환 하는 방법에 대한 리소스를 사용할 수도 있습니다.