假设我有以下内容:
var didConnectObserver: NSObjectProtocol?
didConnectObserver = NSNotificationCenter.defaultCenter().addObserverForName(
MyKey, object: nil, queue: nil, usingBlock: { (note) -> Void in
...
})
在某些时候,我取消注册:
NSNotificationCenter.defaultCenter().removeObserver(didConnectObserver)
但是,这不起作用,因为
didConnectObserver
是 optional 。有没有比以下更紧凑的写法:if let obs = didConnectObserver {
NSNotificationCenter.defaultCenter().removeObserver(obs)
}
如果
didConnectObserver
是 nil
,那仍然是正确的吗? 最佳答案
我仍然掌握 map
与 Optionals 的窍门,但我相信这会奏效:
_ = 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 中调用具有 optional 类型的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33863244/