Так что у меня возникают проблемы с закрытием в моем быстром приложении, в котором я пытаюсь использовать синтаксис как 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 не назначается в закрытии, значит, это означает, что я должен назначить все мои значения внутри закрытия или я что-то ухожу? Любая помощь будет оценена по достоинству.
благодарит за разъяснения. Я думал, что это так, но моя неопытность оставила меня неопределенной. Просто пытаюсь написать самый чистый и разумный код, который я могу. – MiCo