我正在使用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
进行操作?
答案 0 :(得分:2)
你问:
我应该怎么做以外的描述 continueWithBlock
简短回答:你不是。
异步方法的重点在于,在耗时的任务开始处理之前,它会立即继续。您将依赖于结果的代码放在块中。有关详细说明,请参阅此主题的答案,包括示例项目:
(不要被它提到MS Azure的事实所迷惑。它实际上与Azure无关。)
@thefredelement在使用setSet方法对已设置的变量的解决方案也会有效。
答案 1 :(得分:1)
您可以在类或函数范围内为另一个变量分配所需的值,然后可以在变量上调用didSet并在需要时执行另一个函数,如下所示:
var someVariableInScopeOfWhereItsNeeded = "abc" {
didSet {
self.maybeSomeOtherFunctionNow
}
}