質問1
if let
はoptional bindingとしてknownsあります。
オプションでのみ動作します。次のコードはエラーを生成します:
var str = "Hello, playground"
if let x = str {
print("success") // error: initializer for conditional binding must have Optional type, not 'String'
}
なぜですか? はをオプションとしてのみ使用するため、String
はオプションではありません。
Question2
とオプションは、すなわち設定されている場合はい、それは評価に値を持っています。詳細情報については
参照this answer
追加質問:なぜ我々がやっているように?
オプションは設定されているか、設定されていない(値を持っているかどうか)ためです。彼らは価値がある場合にのみ何かをしたい。彼らに価値がないなら、私たちは何もしたくない(どちらもクラッシュしたくない)。
また、アンラップにも使用できます。
var optionalString : String? = "hi"
if let unwraped = optionalString {
print (unwraped) // hi | easier to work with
print(optionalString) // Optional("hi") | not so easy to work with
}