質問: try? convInt(s) { print(x) } else { print("Failure") } }
回答: > > if letは代入される値がnilでなければ代入し処理を実行する > > > そうですね では代入されている値は何ですか? `try? convInt(s)`ですね。 `try? v`は正常パスならv、例外だったらnilを返します。 `v:V`だったとした場合、`try? v`は`V?`を返します。 つまり、`try? convInt(s)`の戻り値の型は`Int??`です。 なので、 `if let x = try? convInt(s)`において、`x`の型は`Int??`です。 さて、 `Int?`の`nil`と`Int??`の`nil`は別物です。 それぞれ、`Optional.None` と `Optional>.None`です。 `convInt("str")`は`Optional.None`を返しますが、 これは、`Optional>`的には存在する値(Some)なので、 `if let`で`x:Int??`に代入可能です。