在Swift中调用带可选类型的函数

时间:2015-11-23 03:19:05

标签: swift optional

我们说我有以下内容:

var didConnectObserver: NSObjectProtocol?

didConnectObserver = NSNotificationCenter.defaultCenter().addObserverForName(
    MyKey, object: nil, queue: nil, usingBlock: { (note) -> Void in
    ...
})

在某些时候我取消注册:

NSNotificationCenter.defaultCenter().removeObserver(didConnectObserver)

但这并不起作用,因为didConnectObserver是可选的。是否有更紧凑的方式来写这个:

if let obs = didConnectObserver {
    NSNotificationCenter.defaultCenter().removeObserver(obs)
}

如果didConnectObservernil,那仍然是正确的吗?

1 个答案:

答案 0 :(得分:2)

我仍然使用Optionals获得map,但我相信这会有效:

_ = didConnectObserver.map(NSNotificationCenter.defaultCenter().removeObserver)

如果didConnectObservernil,则结果为nil,否则会以didConnectObserver!执行该功能。 _ =是必要的,可以取消警告Result of call to 'map' is unused

以下是您输入didConnectObserver.map时显示的自动填充功能:

enter image description here

以下是同一概念的另一个例子:

func add5(i: Int) {
    print("add 5 called")
    print(i + 5)
}

let a: Int? = 10

_ = a.map(add5)

如果anil,则不会调用add5。如果aOptional(10),则会调用add5并打印15

它的工作原理如下:

if a != nil {
    add5(a!)
}