NSLog与Swift 3的问题

时间:2016-10-12 01:16:18

标签: ios swift3

迁移到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

2 个答案:

答案 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协议

的Error实现
class MyError: Error, CustomDebugStringConvertible {
    var debugDescription: String {
        return "The cause of error is xxx"
    }
}

然后将完成设置为MyError而不是Error