1. mono0926

    No comment

    mono0926
Changes in body
Source | HTML | Preview
@@ -1,5 +1,15 @@
+# 以下の書き方がオススメです
+
+```swift
+let token = deviceToken.map { String(format: "%.2hhx", $0) }.joined()
+```
+
+以下、微妙な書き方をしていてSwift 3移行時にうまく変換できなくなったり、他の書き方などの紹介です。
+
+---
+
`UIApplicationDelegate`の`application(_:didRegisterForRemoteNotificationsWithDeviceToken:)`で渡ってくる`deviceToken`(デバイストークン)は`Data`型(Swift 2.2までは`NSData`型)ですが、それを16進数文字列に変換するやり方について紹介します。
Swift 2.2までこんな感じで書いてました。
```swift
@@ -88,6 +98,20 @@
---
というわけで、[1つ目の書き方](http://qiita.com/mono0926/items/3cf0dca3029f32f54a09#mapでdevicetokenの要素を文字列に変換してjoin)がお勧めですヽ(・ω・`)
+個人的には、このように定義して使っています。
+
+```swift
+extension String {
+ public init(deviceToken: Data) {
+ self = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
+ }
+}
+
+func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data!) {
+ let token = String(deviceToken: deviceToken)
+}
+```
+
http://stackoverflow.com/a/24979958/1524942 にも色々載っていましたが、`map`・`join`使うのが今思いつく中ではベストの書き方かなと個人的には思いました。