用? Swift变量中的(可选项)

时间:2014-06-03 21:47:34

标签: ios swift optional-values

Swift中的属性定义到底有什么区别:

var window: UIWindow?

VS

var window: UIWindow

我读过它基本上是“可选的”,但我不明白它是什么。

这是创建一个名为window的类属性吗?那么'?'需要什么?

2 个答案:

答案 0 :(得分:2)

UIWindow?表示该值可能不存在。它可以是UIWindow实例,也可以不是。

答案 1 :(得分:2)

? identifier表示变量是可选,表示其值可以为nil。如果代码中有值,则将其声明为非可选值允许编译器在构建时检查它是否有机会变为nil。

您可以在if语句中检查它是否为零:

var optionalName: String? = "John Appleseed"

if optionalName {
    // <-- here we know it's not nil, for sure!
}

许多需要参数为非nil的方法将声明它们明确需要非可选值。如果您有可选值,则可以通过展开将其转换为非可选值(例如,UIWindow? - &gt; 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)"
}

有关简要介绍,请参阅The Swift Programming Language,第11页;有关更详细的说明,请参阅第46页。