我正在将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/