Cha*_*kle 3 pointers objective-c nserror ios swift
我正在将Swift数据结构实现到Objective-C中,并且我很难"返回"2个值.
我的swift实现最初使用了一个元组来返回resultData和一个错误:
func getData(email: String) -> (SomeResultdata?, NSError?)
Run Code Online (Sandbox Code Playgroud)
但由于元组不是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
}
Run Code Online (Sandbox Code Playgroud)
我得到的两个错误是
方法不能标记为@objc,因为参数2的类型不能在Objective-C中表示
和
无法将表达式的类型'()'转换为'inout $ T2'
例如NSJSONSerialization.dataWithJSONObject()有类似的模式:
class func dataWithJSONObject(obj: AnyObject, options opt: NSJSONWritingOptions, error: NSErrorPointer) -> NSData?
Run Code Online (Sandbox Code Playgroud)
是的NSErrorPointer.
typealias NSErrorPointer = AutoreleasingUnsafeMutablePointer<NSError?>
Run Code Online (Sandbox Code Playgroud)
所以你可以:
@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
}
Run Code Online (Sandbox Code Playgroud)
至于AutoreleasingUnsafeMutablePointer,请参阅文档.
| 归档时间: |
|
| 查看次数: |
1511 次 |
| 最近记录: |