我有一个将数据保存到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)
之前执行,因此该函数总是返回成功,这是错误的,因为它是在有机会更改之前返回的。
设置成功后,如何获取返回的代码?
是否有一种优雅的方法来实现这一目标?
答案 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)")
}