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)。展开的主要方法之一是语句: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)"
}

请参阅Swift 编程语言,第 11 页的简要介绍,或第 46 页的更详细的描述。

于 2014-06-03T21:59:22.837 回答
2

UIWindow?表示该值可能不存在。它要么是一个UIWindow实例,要么什么都不是。

于 2014-06-03T21:55:10.290 回答