如何将 Objective-C NSError 指针传递给 Swift 函数?

How do you pass an Objective-C NSError pointer into a Swift function?

我正在将 Swift 数据结构实施到 Objective-C 中,但我遇到了 'returning' 2 个值的问题。

我的 swift 实现最初使用元组 return resultData 和错误:

func getData(email: String) -> (SomeResultdata?, NSError?)

但是由于元组不是 Objective-C 中的一个特性,所以这个函数没有暴露给 Objective-C。 我现在已经实现了一个专门用于 returning SomeResultData 的方法,而且还为传递的指针引用分配了一个 NSError。 见下文:

@objc func getData(email: String, var withError err: UnsafeMutablePointer<NSError?>) -> SomeResultdata? {
  let (credentials, error) = self.getData(email)
  // This self.getData(email) is the Swift implementation (returns tuple)
  err = &error
  return credentials
}

我遇到的两个错误是

方法无法标记为@objc,因为参数2的类型无法在Objective-C

中表示

无法将表达式的类型“()”转换为类型 'inout $T2'

例如 NSJSONSerialization.dataWithJSONObject() 有类似的模式:

class func dataWithJSONObject(obj: AnyObject, options opt: NSJSONWritingOptions, error: NSErrorPointer) -> NSData?

NSErrorPointer

typealias NSErrorPointer = AutoreleasingUnsafeMutablePointer<NSError?>

所以你可以:

@objc func getData(email: String, withError err: NSErrorPointer) -> SomeResultdata? {
    let (credentials, error) = self.getData(email)
    // This self.getData(email) is the Swift implementation (returns tuple)
    err.memory = error
    return credentials
}

至于AutoreleasingUnsafeMutablePointer,见the documentation