如何等到特定事件回来? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我有一个将数据保存到iCloud的功能

func save(data: Data) -> Bool {
    cloudRecord["example"] = data as CKRecordValue
    var success = false
    CKContainer.default().privateCloudDatabase.save(self.cloudRecord) { (record, error) in
        if let error = error {
            print(error.localizedDescription)
        } else {
            print(1)
            success = true
        }
    }

    print(2)
    return success
}

问题是,print(2)print(1)之前执行,所以函数总是返回成功,这是假的,因为它在有机会改变之前返回。

如何在设置成功后让此代码返回值?

有一种优雅的方式来实现这一目标吗?

ios swift cloud
1个回答
2
投票

而不是从方法返回bool,而是添加一个带有这样的闭包的参数。当您收到privateCloudDatabase.save的回复时,请使用bool值调用该闭包。

func save(data: Data, completion:(Bool)->Void) {
    cloudRecord["notes"] = data as CKRecordValue
    var success = false
    CKContainer.default().privateCloudDatabase.save(self.cloudRecord) { (record, error) in
        if let error = error {
            print(error.localizedDescription)
            completion(false)
        } else {
            print(1)
            completion(true)
        }
    }
}

更改函数调用如下

save(data: data) { result in
    print("result is \(result)")
}

推荐问答