斯威夫特 - 可选的虚空

时间:2014-11-10 06:25:08

标签: swift optional

我正忙着使用NSURLProtocolClient的URLProtocol功能:

welf?.client?.URLProtocol(welf!, didReceiveResponse: operation.response, cacheStoragePolicy: NSURLCacheStoragePolicy.NotAllowed)

我原以为它会返回Void。但令我惊讶的是它返回Void?

为什么有必要区分VoidVoid?

我已经读过Void是空元组类型的类型别名。那么,这是否与空元组类型与nil之间的区别有关?

2 个答案:

答案 0 :(得分:7)

这只是因为您使用的是Optional Chaining。该方法返回Void,但整个链可能会在调用方法之前返回nil

基本上,Void的返回值意味着实际调用(自我和客户都有值),而nil结果意味着其中一个是nil

答案 1 :(得分:6)

请注意,()nil不同:

let a:Void? = ()
let b:Void? = nil

a == nil // -> false
b == nil // -> true

使用此方法,您可以判断该方法是否已被调用。

let result = welf?.client?.URLProtocol(welf!, didReceiveResponse: operation.response, cacheStoragePolicy: NSURLCacheStoragePolicy.NotAllowed)
if result != nil {
    // success
}
else {
    // `welf?.client` was `nil`
}