StringをIntに変換するとき、どう書いたらスマートなんでしょうね。 例えば、ある本の最初のサンプルアプリで、初心者向けに説明するときはこんな感じ。 電卓のような、ボタンに1~9の文字がセットされていて、それをIntに変換するときの処理。
func stringToInt(_ string: String) -> Int {
var value: Int = 0
switch string {
case "1": value = 1
case "2": value = 2
case "3": value = 3
case "4": value = 4
case "5": value = 5
case "6": value = 6
case "7": value = 7
case "8": value = 8
case "9": value = 9
default: value = 0
}
...
プロダクションコードにこんなの入ってきたら、即PR却下するんだけど、じゃあどう書くのがスマートなんでしょうね。
init?(_ string: String)
がOptional<Int>を返すことを利用する。
var value = 0
if let v: Int = Int(title) {
value = v
}
let hoge = A ?? B
AがnilじゃないときはAが代入され、Aがnilのときは、Bが代入される
let value: Int = Int(title) ?? 0
let value: Int = {
if let v: Int = Int(title) {
return v
}
return 0
}()
別解3を見せた時に、このクロージャよく理解できないという話をしていたので、このように見せてみた。
let value: Int = { *() -> Int in
if let v: Int = Int(title) {
return v
}
return 0
}()
いわゆる無名関数なので、普通の関数にして見比べてみればよい。
func hoge() -> Int {
if let v: Int = Int(title) {
return v
}
return 0
}
let value: Int = hoge()
Optional
を理解した時に面白い書き方もついでに