假设我有以下内容:
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
,那仍然会做正确的事情吗?
最佳答案
我仍然在使用 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!)
}
关于swift - 在 Swift 中调用具有可选类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33863244/