2014-09-05 2 views
3

, поэтому я пытаюсь использовать блок executeRequestWithHandler для объекта SLRequest в моем приложении Swift iOS, и я не могу иметь дело с объектом 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. Кто-нибудь знает, что это значит?

Заранее спасибо.

(я использую Xcode Beta 6 v7 с OS X 10,10)

ответ

5

Вы повторно использовать error переменную, переданных в блоке - вы просто должны определить локальную переменную опциональный и передать ссылку на нее JSONObjectWithData

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

Это происходит потому, что JSONObjectWithData нуждается в ссылке на переменную типа NSError. Тот, который передается блоку, неизменен - ​​он указывает на экземпляр NSError, но его нельзя переназначить, чтобы указать на другой экземпляр, или установить нуль в случае отсутствия ошибки.

+0

Объявлял бы параметр 'var' тоже? – jtbandes

+0

, если вы имеете в виду аргумент 'NSError!' В 'performRequestWithHandler', вы можете в идеале объявить его как' inout', но вы не можете, потому что сигнатура обратного вызова изменится, и вы получите ошибку компиляции. Если вы не ссылаетесь на это поле ... прошу пояснить – Antonio

Смежные вопросы