首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift 3换乘NSErrorPointer?

Swift 3换乘NSErrorPointer?
EN

Stack Overflow用户
提问于 2016-07-26 03:18:13
回答 1查看 3.5K关注 0票数 4

我有用于SwiftyJSON的代码,我试图使用XCode 8.0 Beta 3更新到Swift 3。我遇到了一个问题,编译器不喜欢参数'error:&err‘。我一直在寻找如何正确地传递一个NSErrorPointer,但是我发现的所有东西都说要重写、省略错误并抛出一个错误。因为这不是我的代码,所以我宁愿保持原样。那么,使用NSErrorPointer的正确新方法是什么呢?

代码语言:javascript
运行
复制
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,所以我可以使用它,但是我找不到任何关于如何初始化它的东西(类型别名声明是不够的)。我已经看过使用Swift与Cocoa和Obj-C了,它不包含单词NSErrorPointer,而是介绍了抛出错误的新方法。我还查看了几十个帖子,它们都使用了&err,所以这显然是Swift 3中的新鲜事。

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

谢谢你,迈克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-26 04:09:48

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

,它将init方法定义为

代码语言:javascript
运行
复制
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是可选的:

代码语言:javascript
运行
复制
public typealias NSErrorPointer = AutoreleasingUnsafeMutablePointer<NSError?>?

作为…的结果

因此,error参数应该具有NSErrorPointer类型,而不是NSErrorPointer?类型(因此error??.pointee更改为error?.pointee)。通过这些更改,init方法将变为

代码语言:javascript
运行
复制
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())
    }
}

然后您的代码按预期的方式编译和运行。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38580481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档