NSLog与Swift 3的问题

Bla*_*rai 9 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)
        }...
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我为什么这是我可以做的相对容易产生输出?

错误是NSLog unavailable: variadic function unavailable.

mat*_*att 10

尽管存在"可变"红鲱鱼,但问题在于我们不再能够自动桥接到Objective-C类型; 你必须明确地过桥,你自己.写入saveError as NSError以获取Objective-C样式对象.

  • 谢谢你的回答。该错误消息极具误导性。 (2认同)

Nik*_*ono 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)
        }...
Run Code Online (Sandbox Code Playgroud)

或编写自己的Error扩展CustomDebugStringConvertible协议实现

class MyError: Error, CustomDebugStringConvertible {
    var debugDescription: String {
        return "The cause of error is xxx"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • @NicolasMiari错误消息中的"可变参数"极具误导性.问题实际上是我们不再自动桥接到Objective-C类型; 你必须自己做. (2认同)