无法通过闭包来关闭变量

时间:2015-12-23 05:40:20

标签: ios swift parse-platform

我正在使用Parse,我正在尝试存储Parse为您提供的对象唯一标识符。这是帮助理解这一点的代码。

    var objectID = ""
    var object = PFObject(className: "class")
    object["columnTitle"] = "String Data"
    object.saveInBackgroundWithBlock { (success, error) -> Void in
        guard error == nil else {
            print("Error")
            return
        }

        objectID = object.objectId!
    }

    print(objectID)

所以我想当我运行app时,print语句会打印出Parse给你的objectId,但事实并非如此。如果我在闭包内添加print语句肯定会得到我期望的值。看起来print语句在值可以更改之前运行。知道如何解决这个问题吗?我假设使用GCD

所有这些都在viewDidLoad()

1 个答案:

答案 0 :(得分:1)

saveInBackgroundWithBlock是异步调用。如果在块中打印对象ID,则会在另一个线程中执行块时打印它。

如果将print放在块外,它将是调用saveInBackgroundWithBlock后执行的紧接下一个语句。您应该在这两个语句中放置断点并理解行为。

您可以定义一个方法,其中包含与对象ID相关的处理代码,并在saveInBackgroundWithBlock

的末尾调用该方法