我正在将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;
答案 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。