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

时间:2015-03-27 12:40:55

标签: ios objective-c swift pointers nserror

我正在将Swift数据结构实现到Objective-C中,并且我遇到了麻烦并且返回了' 2个值。

我的swift实现最初使用了一个元组来返回resultData和一个错误:

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

但由于元组不是Objective-C中的一个特性,因此该函数不会暴露给Objective-C。 我现在实现了一个专门用于返回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中表示

无法转换表达式&#39;()&#39;键入&#39; in $ T2&#39;

1 个答案:

答案 0 :(得分:6)

例如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