我们说我有以下内容:
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)
}
如果didConnectObserver
为nil
,那仍然是正确的吗?
答案 0 :(得分:2)
我仍然使用Optionals获得map
,但我相信这会有效:
_ = didConnectObserver.map(NSNotificationCenter.defaultCenter().removeObserver)
如果didConnectObserver
为nil
,则结果为nil
,否则会以didConnectObserver!
执行该功能。 _ =
是必要的,可以取消警告Result of call to 'map' is unused
。
以下是您输入didConnectObserver.map
时显示的自动填充功能:
以下是同一概念的另一个例子:
func add5(i: Int) {
print("add 5 called")
print(i + 5)
}
let a: Int? = 10
_ = a.map(add5)
如果a
为nil
,则不会调用add5
。如果a
为Optional(10)
,则会调用add5
并打印15
。
它的工作原理如下:
if a != nil {
add5(a!)
}