gpt4 book ai didi

Swift 3 更改为 NSErrorPointer?

转载 作者:搜寻专家 更新时间:2023-10-31 08:20:10 25 4
gpt4 key购买 nike

我有我一直在使用 SwiftyJSON 的代码,我正在尝试使用 XCode 8.0 Beta 3 更新到 Swift 3。我遇到了编译器不喜欢参数“error: &err”的问题和以前一样。我一直在寻找如何正确传递 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 分支中的错误

定义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?>?

由于

因此 error 参数的类型应该是 NSErrorPointer,不是 NSErrorPointer?(因此 error??.pointee更改为 error?.pointee)。通过这些更改,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())
}
}

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

关于Swift 3 更改为 NSErrorPointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38580481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com