Swift 3改为NSErrorPointer?
我有一直用于
SwiftyJSON的代码,我正在尝试使用XCode 8.0 Beta 3更新到Swift 3.我遇到了一个问题,编译器不喜欢参数’error:& err’as它之前做过.我一直在寻找如何正确传递NSErrorPointer但我发现的所有内容都说要重写,省略错误并抛出错误.由于这不是我的代码,我宁愿保持原样.那么使用NSErrorPointer的正确新方法是什么?
var err : NSError? // code to get jsonData from file let json = JSON(data: jsonData,options: JSONSerialization.ReadingOptions.allowFragments,error: &err) if err != nil { // do something with the error } else { return json } 上面的代码导致编译器错误:’&’只能立即出现在调用参数列表中.我已经尝试创建一个NSErrorPointer,所以我可以使用它,但我找不到任何关于如何初始化一个(类型别名声明是不够的).我已经去过Using Swift with Cocoa and Obj-C,它不包含单词NSErrorPointer,而是重新抛出了抛出错误的新方法.我还查看了几十个使用& err的帖子,所以显然这是Swift 3的新功能. 那里有人解决了这个问题吗?使用NSErrorPointer的答案是什么? 谢谢, 解决方法
这似乎是SwiftyJSON的Swift 3分支中的一个错误
> https://github.com/SwiftyJSON/SwiftyJSON/blob/swift3/Source/SwiftyJSON.swift 它将init方法定义为 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()) } } 在Xcode 8 beta 3附带的Swift 3中,NSErrorPointer是可选的: public typealias NSErrorPointer = AutoreleasingUnsafeMutablePointer<NSError?>? 作为结果 > SE-0055: Make unsafe pointer nullability explicit using Optional 因此,error参数应该具有NSErrorPointer类型, public init(data:Data,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()) } } 然后你的代码编译并按预期运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |