0

Swiftのプロパティ定義の違いは正確には何ですか:

var window: UIWindow?

var window: UIWindow

基本的に「オプション」だと読んだことがありますが、それが何のためにあるのかわかりません。

これは window というクラス プロパティを作成していますよね?では、「?」の必要性は何ですか?

4

2 に答える 2

2

? 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 を参照してください。

于 2014-06-03T21:59:22.837 に答える