Swift - 变量不保留价值

时间:2015-08-13 23:42:26

标签: ios swift variables amazon-web-services amazon-s3

我正在使用AWS来托管我的iOS应用程序的图像。现在我正在尝试列出S3存储桶中的所有对象。

这是我的代码:

var description = ""
AWSS3.registerS3WithConfiguration(serviceConfig2, forKey: "s3")
AWSS3.S3ForKey("s3").listObjects(objectList).continueWithBlock { (task: AWSTask!) -> AnyObject! in
    if task.error != nil {
        println(task.error)
    }
    if task.result != nil {
        description = task.result!.description
        println(description)
    }
    return nil
}

println(description == "")

输出为true,后跟task.result!.description的正确内容。换句话说,continueWithBlock外部的println首先打印,当时description尚未更新。

我应该如何在continueWithBlock之外使用description进行操作?

2 个答案:

答案 0 :(得分:2)

你问:

  

我应该怎么做以外的描述   continueWithBlock

简短回答:你不是。

异步方法的重点在于,在耗时的任务开始处理之前,它会立即继续。您将依赖于结果的代码放在块中。有关详细说明,请参阅此主题的答案,包括示例项目:

Why does Microsoft Azure (or Swift in general) fail to update a variable to return after a table query?

(不要被它提到MS Azure的事实所迷惑。它实际上与Azure无关。)

@thefredelement在使用setSet方法对已设置的变量的解决方案也会有效。

答案 1 :(得分:1)

您可以在类或函数范围内为另一个变量分配所需的值,然后可以在变量上调用didSet并在需要时执行另一个函数,如下所示:

var someVariableInScopeOfWhereItsNeeded = "abc" {

    didSet {

        self.maybeSomeOtherFunctionNow

    }
}