根据类引用,captureStillImageAsynchronouslyFromConnection的完成处理程序接受NSError对象,但它不是可选的。
功能声明:
func captureStillImageAsynchronouslyFromConnection(connection: AVCaptureConnection!, completionHandler handler: ((CMSampleBuffer!, NSError!) -> Void)!)
然而,在参数的描述中,如果请求得到满足,则表示可以在完成处理程序中返回nil来代替NSError对象。
参数说明:
If the request could not be completed, an NSError object that describes the problem; otherwise nil.
说明建议声明应该包含NSError对象的可选项,不是吗?参数描述和函数声明是否冲突?
答案 0 :(得分:1)
只要你不打开并使用null的可选项,你就可以了。
以下是显示变体的示例代码。请注意,回调签名使用隐式展开选项,而传递的参数可以是nil。
import Foundation
struct Buffer {
}
func foo(callback: (buffer: Buffer!, error: NSError!) -> Void) {
print("#1: buffer and error are nil")
callback(buffer: nil, error: nil)
print("#2: buffer not nil, error is nil")
callback(buffer: Buffer(), error: nil)
print("#3: buffer is nil, error is not nil")
callback(buffer: nil, error: NSError(domain: "domain", code: 123, userInfo: nil))
print("#4: both buffer and error are not nil")
callback(buffer: Buffer(), error: NSError(domain: "domain", code: 123, userInfo: nil))
}
func cb(buffer: Buffer!, error: NSError!) {
if let buffer = buffer {
print(buffer)
}
else {
print("buffer is nil")
}
if let error = error {
print(error)
}
else {
print("error is nil")
}
}
foo(cb)
从这个例子中可以看出,一个隐式的unwrapped可选项可以是nil。这就是NSError的描述。