以下の関数convInt()は引数に文字列を代入し空文字ならエラーを投げ、整数に直せる場合はその整数自身を返し、整数に直せない場合はnilを返すというものです。
質問の箇所はfor文内のif let文です。if letは代入される値がnilでなければ代入し処理を実行する、というものだと思っているのですがif文をブロック内の処理とするfor文で使われている定数sに格納された配列内の"str"を関数convIntの引数として実行され定数xに代入される場合、nilが返されるので代入できないと思うのですが、正常に代入されif let文内の処理も実行されています。なぜnilが返されるはず関数をxに代入する事ができたのでしょうか?
enum FooError:ErrorType {
case Ooal
}
func convInt(s:String) throws -> Int? {
if s == "" {
throw FooError.Ooal
}
return Int(s)
}
for s in ["1", "str", ""] {
if let x = try? convInt(s) {
print(x)
} else {
print("Failure")
}
}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/24 04:21
2016/03/24 04:39