强制将单个参数传递给多可选参数函数

Bea*_*lle 4 swift

考虑以下功能:

func myFunction(completion: (data: Data?, error: Error?) -> ()) { }
Run Code Online (Sandbox Code Playgroud)

我目前的要求是completion:只接受data值或error值,但不接受两者.一个人必须是零.

很容易将它们保持为可选,然后展开并稍后检查它们的值,但我认为如果编译器能够通知开发人员他们不能同时设置它们会更好.

从另一个角度来看,知道其中一个将永远被设置为someValue更有用.

通过这种方式,您可以保证获得一个error或者data,并且永远不必担心处理它们的情况nil.

目前有办法做到这一点吗?

Yan*_*ick 8

我建议你使用这样的枚举

enum Result<T> {
    case Success(T)
    case Error(String, Int)
}
Run Code Online (Sandbox Code Playgroud)

看看在Swift 2中处理异步闭包错误的最佳方法?原始答案写得更详细.