这个问题在这里已有答案:
我有一个将数据保存到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)
之前执行,所以函数总是返回成功,这是假的,因为它在有机会改变之前返回。
如何在设置成功后让此代码返回值?
有一种优雅的方式来实现这一目标吗?
而不是从方法返回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)")
}