2014-10-06 4 views
1

Так что у меня возникают проблемы с закрытием в моем быстром приложении, в котором я пытаюсь использовать синтаксис как BaaS. В частности, я не понимаю, почему я не могу назначить переменную в закрытии и иметь доступ к ней за ее пределами. мой код, который делает работу выглядит следующим образом:понимание закрытия в swift

class SecondView: UIViewController { 

@IBOutlet var label:UILabel! 

var budgetInfo:NSArray = [] 

var item:PFObject! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    var query = PFQuery(className: "Budget") 
    query.whereKey("creditor", equalTo: "rent") 
    query.getFirstObjectInBackgroundWithBlock({ 
     (object:PFObject!, error:NSError!) in 

     self.label.text = NSString(format: "%@", object.objectForKey(key: "amount") as NSNumber) 

    }) 

} 

этот код работает отлично, как всегда, когда я пытаюсь присвоить var item:PFObject! с в блоке, как это:

class SecondView: UIViewController { 

@IBOutlet var label:UILabel! 

var budgetInfo:NSArray = [] 

var item:PFObject! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    var query = PFQuery(className: "Budget") 
    query.whereKey("creditor", equalTo: "rent") 
    query.getFirstObjectInBackgroundWithBlock({ 
     (object:PFObject!, error:NSError!) in 

     self.item = object 

    }) 

    label.text = NSString(format: "%@", item.objectForKey("amount") as NSNumber) 
} 

я получаю исключение, которое гласит

unexpectedly found nil when unwrapping optional 

Таким образом, очевидно, что переменная item не назначается в закрытии, значит, это означает, что я должен назначить все мои значения внутри закрытия или я что-то ухожу? Любая помощь будет оценена по достоинству.

ответ

1

Он присваивается, это происходит только до завершения закрытия. Вот почему

item.objectForKey("amount") 

«пункт» отсутствует

Решение - поставить любую логику у вас там внутри затвора, которая является асинхронной я верю.

+0

благодарит за разъяснения. Я думал, что это так, но моя неопытность оставила меня неопределенной. Просто пытаюсь написать самый чистый и разумный код, который я могу. – MiCo

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