StringをMD5に変換するのはこのようなコードになりました。
これを書いている中で学んだことのメモです。
文字の連結
NSData
ではなくData
を使い、NS
が付くものをあまり使わないようにと思っていたのです。
でも、MD5文字列に連結する箇所で、はじめはNSMutableString
を使っていました。
before
for i in 0 ..< digestLength { result.appendFormat("%02x", md5Buffer[i]) }
- for文で書いていました
NSMutableString
を使っていました
何だかしっくりこない…と調べるうちにreduce
が使えることを知りました。
after
md5String = (0..<digestLength).reduce("") { $0 + String(format:"%02x", md5Buffer[$1]) }
reduce
を使いましたNSMutableString
がなくなりました
スッキリしました。
CountableRange
(0..<digestLength)
この部分はCountableRange
になっているのですね。
CountableRange
では、map
やfilter
などを使うことができます。
クロージャの書き方
きちんと理解できていなかったのでおさらい。
変化の軌跡を残してみます。
その1
md5String = (0..<digestLength).reduce("", { (result, index) -> String in return result + String(format: "%02x", md5Buffer[index]) })
- 引数や戻り値の型をすべて記述しました。
その2
md5String = (0..<digestLength).reduce("") { result, index in result + String(format:"%02x", md5Buffer[index]) }
- 型とreturnを省略しました。
その3
md5String = (0..<digestLength).reduce("") { $0 + String(format:"%02x", md5Buffer[$1]) }
- 引数の名前を省略しました。
mapなどを使う時はこの省略形を最もよく目にするので、これを使うのが良いですね。