2017-01-07 14 views
-1

Используя swift 3.0, я пытаюсь преобразовать deviceToken (data) в строку, но он не возвращает правильную строку.Невозможно преобразовать правильный токен устройства в swift 3.0

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

    let tokenString = deviceToken.reduce("") { string, byte in 
     string + String(format: "%02X", byte) 
    } 
    print("token: ", tokenString) 

} 

Кто-нибудь знает, что я делаю неправильно?

+0

Что вы получаете и чего вы ожидаете? –

ответ

2

В Swift 3 это немного легче, потому что Data ведет себя как массив:

let tokenString = deviceToken.map{ String(format: "%02X", $0) }.joined() 
+0

Если я ошибаюсь, это даст точно такой же результат, как и код OP, который использует этот Data - последовательность в Swift 3. –

0

Вы можете преобразовать его с помощью этого метода в качестве маркеров устройства является массивом Uint8 в виде байтов вы должны описать каждый байт ,

let token = String(describing: deviceToken as CVarArg).replaceCharacters("<> ", toSeparator: "") 

Я создал расширение в строку, как я использую replaceCharacters() часто

extension String { func replaceCharacters(_ characters: String, toSeparator: String) -> String { let characterSet = CharacterSet(charactersIn: characters) let components = self.components(separatedBy: characterSet) let result = components.joined(separator: toSeparator) return result } }

+0

Проверьте это: https://postimg.org/image/mfl4rgymf/ – sanjeet

+0

@sanjeet updated –

0
var token = NSData.init(data: deviceToken).description 
    token = token.replacingOccurrences(of: "<", with: "") 
    token = token.replacingOccurrences(of: " ", with: "") 
    token = token.replacingOccurrences(of: ">", with: "") 
    token = String.init(describing: token) 

    print(token) 

Надеется, что это поможет вам получить точную devicetoken для отправки на сервер.