Swift中的属性定义到底有什么区别:
var window: UIWindow?
VS
var window: UIWindow
我读过它基本上是“可选的”,但我不明白它是什么。
这是创建一个名为window的类属性吗?那么'?'需要什么?
答案 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页。