Swift 3改为NSErrorPointer?

时间:2016-07-26 03:18:13

标签: swift error-handling swift3

我有用于SwiftyJSON的代码,我正在尝试使用XCode 8.0 Beta 3更新到Swift 3.我遇到了编译器没有问题的问题喜欢论证'错误:& err'就像以前一样。我一直在寻找如何正确传递NSErrorPointer,但我发现的所有内容都说要重写,省略错误并抛出错误。由于这不是我的代码,我宁愿保持原样。那么使用NSErrorPointer的正确新方法是什么?

res.render('text', result);

上面的代码会导致编译错误:'&'只能立即出现在调用参数列表中。我已经尝试过创建一个NSErrorPointer,所以我可以使用它,但我找不到任何关于如何初始化一个(类型别名声明是不够的)。我已经去过Using Swift with Cocoa and Obj-C,它不包含单词NSErrorPointer,而是覆盖了抛出错误的新方法。我还查看了几十个使用& err的帖子,所以显然这对Swift 3来说是新的。

那里有人解决了这个问题吗?使用NSErrorPointer的答案是什么?

谢谢, 麦克

1 个答案:

答案 0 :(得分:7)

这似乎是SwiftyJSON的Swift 3分支中的错误

将init方法定义为

req

在Xcode 8 beta 3附带的Swift 3中,public init(data:Data, options opt: JSONSerialization.ReadingOptions = .allowFragments, error: NSErrorPointer? = nil) { do { let object: AnyObject = try JSONSerialization.jsonObject(with: data, options: opt) self.init(object) } catch let aError as NSError { if error != nil { error??.pointee = aError } self.init(NSNull()) } } 是可选的:

NSErrorPointer

的结果

因此public typealias NSErrorPointer = AutoreleasingUnsafeMutablePointer<NSError?>? 参数的类型应为error, 不是NSErrorPointer(因此NSErrorPointer? 改为error??.pointee)。 通过这些更改,init方法变为

error?.pointee

然后您的代码按预期编译并运行。