【问题标题】:'NSError' is not convertible to '@lvalue inout $T9' in Swift'NSError' 在 Swift 中不能转换为 '@lvalue inout $T9'
【发布时间】:2014-10-30 19:53:15
【问题描述】:

所以我试图在我的 Swift iOS 应用程序中的 SLRequest 对象上使用 performRequestWithHandler 块,但我无法处理 NSError 对象。这就是我的代码的样子:

posts.performRequestWithHandler({(response:NSData!, urlResponse:NSHTTPURLResponse!, error:NSError!) in
    self.data = NSJSONSerialization.JSONObjectWithData(response, options: NSJSONReadingOptions.MutableLeaves, error: &error)
})

我在&error 上有一个错误,上面写着:'NSError' is not convertible to '@lvalue inout $T9' in Swift。有谁知道这是什么意思?

提前谢谢你。

(我在 OS X 10.10 上使用 Xcode Beta 6 v7)

【问题讨论】:

    标签: ios swift nserror unsafe-pointers


    【解决方案1】:

    您正在重用传入块的 error 变量 - 您只需定义一个本地可选变量并将其引用传递给 JSONObjectWithData

    var myError: NSError?
    self.data = NSJSONSerialization.JSONObjectWithData(response, options:NSJSONReadingOptions.MutableLeaves, error: &myError)
    

    这是因为JSONObjectWithData 需要引用NSError 类型的变量。传递给块的那个是不可变的 - 它指向 NSError 的一个实例,但不能重新分配以指向另一个实例,或者在没有错误的情况下设置为 nil。

    【讨论】:

    • 如果您指的是performRequestWithHandler 中的NSError! 参数,理想情况下您可以将其声明为inout,但您不能这样做,因为回调签名会更改并且您会收到编译错误.如果你没有提到那个领域......请澄清
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    相关资源
    最近更新 更多