我正忙着使用NSURLProtocolClient
的URLProtocol功能:
welf?.client?.URLProtocol(welf!, didReceiveResponse: operation.response, cacheStoragePolicy: NSURLCacheStoragePolicy.NotAllowed)
我原以为它会返回Void
。但令我惊讶的是它返回Void?
为什么有必要区分Void
和Void?
我已经读过Void
是空元组类型的类型别名。那么,这是否与空元组类型与nil之间的区别有关?
答案 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`
}