2014-10-06 68 views
1

因此,我在快速应用程序中遇到了与闭包有关的问题,其中我试图将解析用作BaaS。特别是我不明白为什么我不能在闭包中分配一个变量并在其外部访问它。我的代码,做工作的样子:了解快速关闭

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 

所以很明显,项目变量没有在闭包中被赋值,那么这是否意味着我应该将所有的值都分配给闭包中,还是我要留下什么东西?任何帮助,将不胜感激。

回答

1

它被赋值,它只是在闭包完成执行之前发生。这就是为什么

item.objectForKey("amount") 

“项目”是零

的解决方案 - 把你拥有的任何逻辑没有关闭,这是异步的,我相信里面。

+0

感谢您澄清。我当时就是这么想的,但我的经验不足使我不确定。试图写出最干净,最明智的代码。 – MiCo 2014-10-06 07:07:59