【问题标题】:understanding closures in swift快速了解闭包
【发布时间】:2014-10-06 06:54:02
【问题描述】:

所以我在我的 swift 应用程序中遇到了闭包问题,我在其中尝试将 parse 用作 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

所以很明显 item 变量没有在闭包中被赋值,所以这是否意味着我应该在闭包中分配我的所有值,或者我是否遗漏了一些东西?任何帮助将不胜感激。

【问题讨论】:

    标签: swift parse-platform ios8


    【解决方案1】:

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

     item.objectForKey("amount")
    

    “项目”为零

    解决方案是 - 将您拥有的任何逻辑放入闭包中,我相信这是异步的。

    【讨论】:

    • 感谢您的澄清。我以为是这样,但我的经验不足让我不确定。只是试着写出我能写的最干净、最合理的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2014-09-10
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多