可选链接
你可以使用 Optional Chaining 来调用方法 ,访问属性或下标可选。这是通过在给定的可选变量和给定成员(方法,属性或下标)之间放置 ?
来完成的。
struct Foo {
func doSomething() {
print("Hello World!")
}
}
var foo : Foo? = Foo()
foo?.doSomething() // prints "Hello World!" as foo is non-nil
如果 foo
包含一个值,将在其上调用 doSomething()
。如果 foo
是 nil
,那么什么都不会发生 - 代码将无声地失败并继续执行。
var foo : Foo? = nil
foo?.doSomething() // will not be called as foo is nil
(这与在 Objective-C 中向 nil
发送消息的行为类似)
可选链接这样命名的原因是可选性将通过你调用/访问的成员传播。这意味着,与可选链接一起使用的任何成员的返回值都是可选的,无论它们是否被输入为可选项。
struct Foo {
var bar : Int
func doSomething() { ... }
}
let foo : Foo? = Foo(bar: 5)
print(foo?.bar) // Optional(5)
这里 foo?.bar
正在返回 Int?
,即使 bar
是非可选的,因为 foo
本身是可选的。
随着可选性的传播,返回 Void
的方法将在使用可选链接调用时返回 Void?
。这可以用于确定方法是否被调用(因此可选的具有值)。
let foo : Foo? = Foo()
if foo?.doSomething() != nil {
print("foo is non-nil, and doSomething() was called")
} else {
print("foo is nil, therefore doSomething() wasn't called")
}
这里我们将 Void?
的返回值与 nil
进行比较,以确定方法是否被调用(因此 foo
是否为非零)。