1. mono0926

    %02.2hhx → %.2hhx

    mono0926
Changes in body
Source | HTML | Preview
@@ -26,20 +26,20 @@
気に入った順に3通りの解を載せておきます。
## `map`で`deviceToken`の要素を文字列に変換して`join`
```swift
-let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
+let token = deviceToken.map { String(format: "%.2hhx", $0) }.joined()
```
## `reduce`を使う
上の例と似たような感じですが、`map`・`join`ではなく`reduce`で処理しました。
初めはこっちで書いちゃいましたが、よく考えたら上の例の方が読みやすいと思って書き換えました。好みの範囲かもしれません(例えば、コードレビューで、`reduce`より`map`・`join`でやった方が良いなどとは僕は指摘しません)。
```swift
-let token = deviceToken.reduce("") { $0 + String(format: "%02.2hhx", $1) }
+let token = deviceToken.reduce("") { $0 + String(format: "%.2hhx", $1) }
```
## `NSData`にキャストする
Swift 3.0で`NSData`型の`deviceToken`が`Data`値型にブリッジされて、`deviceToken.description`の結果が変わってしまった、というのがこの問題の本質であり、ではキャストで`NSData`に戻すとどうなる?と試したら、適切な結果が得られました。
@@ -62,11 +62,11 @@
## `String`の`init(format:)`イニシャライザーを利用
フォーマット指定子を使った方法です。
```swift
-String(format: "%02.2hhx", dataElement)
+String(format: "%.2hhx", dataElement)
```
## `String`の`init(_:radix:uppercase:)`イニシャライザーを利用
フォーマット指定子は特に今回のように普段あまり使わない種類は、使う時も読む時も分かりにくいですよね。というわけでやっている処理が分かりやすいこちらを採用したいと思ったものの、`dataElement`が15以下の時に一桁になってしまうのでダメでした(´・︵・`)