Swiftのプロパティ定義の違いは正確には何ですか:
var window: UIWindow?
対
var window: UIWindow
基本的に「オプション」だと読んだことがありますが、それが何のためにあるのかわかりません。
これは window というクラス プロパティを作成していますよね?では、「?」の必要性は何ですか?
Swiftのプロパティ定義の違いは正確には何ですか:
var window: UIWindow?
対
var window: UIWindow
基本的に「オプション」だと読んだことがありますが、それが何のためにあるのかわかりません。
これは window というクラス プロパティを作成していますよね?では、「?」の必要性は何ですか?
? identifier は、変数がオプションであることを意味します。つまり、その値は nil になる可能性があります。コードに値がある場合、それを非オプションとして宣言すると、コンパイラはビルド時に値が nil になる可能性があるかどうかをチェックできます。
if ステートメントで nil かどうかを確認できます。
var optionalName: String? = "John Appleseed"
if optionalName {
// <-- here we know it's not nil, for sure!
}
パラメーターが非 nil であることを必要とする多くのメソッドは、オプションではない値が明示的に必要であることを宣言します。オプションの値がある場合は、ラップを解除することで非オプション (たとえば、-UIWindow?
> UIWindow
) に変換できます。アンラップの主な方法の 1 つはステートメントです。if let
var greeting = "Hello!"
// at this point in the code, optionalName could be nil
if let name = optionalName {
// here, we've unwrapped it into name, which is not optional and can't be nil
greeting = "Hello, \(name)"
}
簡単な紹介についてはThe Swift Programming Language , page 11 を、より詳細な説明については page 46 を参照してください。