Swift 3是否更改为NSErrorPointer?

Swift 3是否更改为NSErrorPointer?,swift,error-handling,swift3,Swift,Error Handling,Swift3,我有我一直在使用的SwiftyJSON代码,我正在尝试使用XCode 8.0 Beta 3更新到Swift 3。我遇到了一个问题,编译器不像以前那样喜欢参数'error:&err'。我一直在寻找如何正确地传递NSErrorInter,但我发现的所有内容都表示要重新写入、忽略错误并返回错误。既然这不是我的代码,我宁愿保持原样。那么,使用NSErrorInter的正确新方法是什么 var err : NSError? // code to get jsonData from file let jso

我有我一直在使用的SwiftyJSON代码,我正在尝试使用XCode 8.0 Beta 3更新到Swift 3。我遇到了一个问题,编译器不像以前那样喜欢参数'error:&err'。我一直在寻找如何正确地传递NSErrorInter,但我发现的所有内容都表示要重新写入、忽略错误并返回错误。既然这不是我的代码,我宁愿保持原样。那么,使用NSErrorInter的正确新方法是什么

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
}
上面的代码导致编译器错误:“&”只能立即出现在调用参数列表中。我已经尝试创建了一个NSErrorInter,这样我就可以使用它了,但是我找不到任何关于如何初始化它的信息(类型别名声明是不够的)。我已经去过了,它不包含NSErrorPointer这个词,而是介绍了抛出错误的新方法。我也看过几十篇文章都使用了&err,显然这是swift3的新功能

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

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
}
谢谢,
Mike

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

它将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?>?

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

非常感谢回答中的详细信息。看起来SwiftyJSON复制了SE-0055中概述的更改类型别名所做的工作。