如何等待返回某个事件?

时间:2019-04-29 14:48:17

标签: ios swift cloud

我有一个将数据保存到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)之前执行,因此该函数总是返回成功,这是错误的,因为它是在有机会更改之前返回的。

设置成功后,如何获取返回的代码?

是否有一种优雅的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

不是从方法中返回布尔值,而是添加带有这样的闭包的参数。当您收到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)")
}