我正在将Swift数据结构实现到Objective-C,并且无法“返回” 2个值。

我的快速实现最初使用一个元组返回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 中表示



无法将表达式的类型'()'转换为'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

关于ios - 如何将Objective-C NSError指针传递给Swift函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29300933/

10-10 17:55
查看更多