Swift 3改为NSErrorPointer?

Swift 3改为NSErrorPointer?,第1张

概述我有一直用于 SwiftyJSON的代码,我正在尝试使用XCode 8.0 Beta 3更新到Swift 3.我遇到了一个问题,编译器不喜欢参数’error:& err’as它之前做过.我一直在寻找如何正确传递NSErrorPointer但我发现的所有内容都说要重写,省略错误并抛出错误.由于这不是我的代码,我宁愿保持原样.那么使用NSErrorPointer的正确新方法是什么? var err : 我有一直用于 SwiftyJsON的代码,我正在尝试使用XCode 8.0 Beta 3更新到Swift 3.我遇到了一个问题,编译器不喜欢参数’error:& err’as它之前做过.我一直在寻找如何正确传递NSErrorPointer但我发现的所有内容都说要重写,省略错误并抛出错误.由于这不是我的代码,我宁愿保持原样.那么使用NSErrorPointer的正确新方法是什么?

var err : NSError?// code to get JsonData from filelet 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类型,
不是NSErrorPointer? (并因此错误??.pointee
改为错误?.inintee).
通过这些更改,init方法变为

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())    }}

然后你的代码编译并按预期运行.

总结

以上是内存溢出为你收集整理的Swift 3改为NSErrorPointer?全部内容,希望文章能够帮你解决Swift 3改为NSErrorPointer?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1004558.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存