- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有我一直在使用 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/
我不是在问如何将 NSErrorPointer 传递给函数,而是在问如何接收和使用它。我找不到任何关于此的文档。像这样: func doSomething(error: NSErrorPointer)
var data: NSDictionary = NSJSONSerialization.JSONObjectWithData(responseData, options:NSJSONRead
有没有办法在 Swift 中从以下 NSErrorPointer 获取可读信息? var downloadErrorPointer = NSErrorPointer(); self.rssString
我有我一直在使用 SwiftyJSON 的代码,我正在尝试使用 XCode 8.0 Beta 3 更新到 Swift 3。我遇到了编译器不喜欢参数“error: &err”的问题和以前一样。我一直在寻
在 Swift 中,符号 & 用于 inout 参数。喜欢 var value = 3 func inoutfunc(inout onlyPara: Int) { onlyPara++ } inout
尝试将 NSErrorPointer 作为参数传递给解析器函数时不断出现此错误。 函数定义为: func parseCSV (contentsOfURL: NSURL, encoding: NSStr
我正在尝试使用 ZipZap方法 ZZArchiveEntry(fileName: String!, compress: Bool, dataBlock: ((NSErrorPointer) -> N
我正在尝试按照 Apple 的 Swift 文档 (https://developer.apple.com/library/mac/documentation/swift/conceptual/Bui
我正在使用 Xcode 6 开发 Swift 1.2,但现在我已经使用 Swift 2.1 安装了 Xcode 7。尽管我的代码在 Swift 1.2 上运行良好,但 Swift 2.1 中存在许多错
我计划在 Cocoapods 上使用 AZSocketIO,以使用 socket.io。我想使用 NSErrorPointer 来获取调用 AZSocketIO#emit() 时的错误。 var em
我是一名优秀的程序员,十分优秀!