如何将 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。
我正在将 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。