迁移到Swift 3后,我尝试执行时出错:
self.publicDB.save(listRecord, completionHandler: { (record, error) -> Void in
if let saveError = error {
NSLog("There was an error saving the record: %@", saveError)
}...
有人可以告诉我为什么这样做以及我能做些什么产生相对容易的输出?
错误为NSLog unavailable: variadic function unavailable
。
答案 0 :(得分:10)
这个问题,尽管" variadic"红鲱鱼,是我们不再自动桥接到Objective-C类型;你必须明确地过桥,你自己。写saveError as NSError
以获得Objective-C样式对象。
答案 1 :(得分:6)
NSLog不能与Swift Object一起使用,完成处理程序传递的错误是Error not NSError。
所以将代码更改为
self.publicDB.save(listRecord, completionHandler: { (record, error) -> Void in
if let saveError = error as? NSError {
NSLog("There was an error saving the record: %@", saveError)
}...
或编写自己的扩展CustomDebugStringConvertible
协议
class MyError: Error, CustomDebugStringConvertible {
var debugDescription: String {
return "The cause of error is xxx"
}
}
然后将完成设置为MyError
而不是Error