Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中使用可选类型调用函数_Swift_Optional - Fatal编程技术网

在Swift中使用可选类型调用函数

在Swift中使用可选类型调用函数,swift,optional,Swift,Optional,假设我有以下几点: var didConnectObserver: NSObjectProtocol? didConnectObserver = NSNotificationCenter.defaultCenter().addObserverForName( MyKey, object: nil, queue: nil, usingBlock: { (note) -> Void in ... }) 在某个时候,我注销了: NSNotificationCenter.def

假设我有以下几点:

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

我仍然掌握了
map
选项的窍门,但我相信这会起作用:

_ = didConnectObserver.map(NSNotificationCenter.defaultCenter().removeObserver)
如果
didConnectObserver
nil
,则其结果为
nil
,否则它将使用
didConnectObserver执行函数
\uu=
是必要的,以抑制调用“map”的结果未使用的警告

以下是键入
didConnectObserver.map
时自动完成显示的内容:

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

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

let a: Int? = 10

_ = a.map(add5)
如果
a
nil
,则不调用
add5
。如果
a
可选(10)
,则调用
add5
,并打印
15

它的工作原理就像:

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

我认为这是不可能的。前几天我在想这个。我认为这是一个合理的问题。我认为需要对序列类型(例如数组)调用map,而且我认为您需要使用。。didiConnectObserver?.map{…}您可以在单个可选项上调用map。请看一个有效的例子。如果Swift能够使可选的符合
CollectionType
(就像Scala那样),或者至少符合
SequenceType
,那么它将具有
forEach
过滤器,这将是一件好事。
map
函数在这里工作,但是如果可用的话,
forEach
会更有意义。太棒了。不知道你可以在上面调用
map
。这将非常类似于函子。