斯威夫特 - 可选的虚空

Clo*_*ife 4 optional swift

我正忙着使用NSURLProtocolClientURLProtocol函数:

welf?.client?.URLProtocol(welf!, didReceiveResponse: operation.response, cacheStoragePolicy: NSURLCacheStoragePolicy.NotAllowed)
Run Code Online (Sandbox Code Playgroud)

我期待它回归Void.但令我惊讶的是它回归了Void?

为什么有必要区分VoidVoid?

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

dre*_*wag 7

这只是因为您使用的是可选链接.该方法返回Void,但整个链可能nil在调用方法之前返回.

从本质上讲,返回值Void意味着实际调用(自己和客户都有值),而nil结果将意味着其中一个是nil.


rin*_*aro 6

请注意,()并且nil是不同的:

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

a == nil // -> false
b == nil // -> true
Run Code Online (Sandbox Code Playgroud)

使用这个,你可以判断方法是否真的被调用过.

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