То, что я пытаюсь достичь, это: 1) получать записи из облачного набора (исключая активы) 2) случайным образом выбрать 3 записи из этих извлеченных записей 3) получить полные 3 записи из облачного набора (включая активы).
Проблема, с которой я борюсь, заключается в том, чтобы 1, 2 и 3 начинались и заканчивались один за другим.
//...
.onAppear(){
let group = DispatchGroup()
// MARK: - 1) fetch from CloudKit - excluding CKAsset
CloudKit.fetch() {(result) in
group.enter() // moving group.enter() above CloudKit.fetch() locks everything up
switch result {
case .success(let newItem):
self.array.append(newItem)
group.leave()
case .failure(let err):
print(err.localizedDescription)
}
}
// MARK: - 2) randomly select 3 records
group.wait() // doesn't actually wait as this is executed before group.enter()
self.array.shuffle()
let firstSelection = self.array[0].recordID!
let firstSelection = self.array[1].recordID!
let firstSelection = self.array[2].recordID!
// MARK: - 3) fetch recordID from CloudKit - includes CKAsset
CloudKit.fetchRecord(recordID: self.array[0]) {(result) in
switch result {
case .success(let newItem):
self.arrayRandomlySelected.append(newItem)
case .failure(let err):
print(err.localizedDescription)
}
}
// run for remaining 2 records and move to next view when done
}
Я пытался использовать DispatchGroup()
, но group.wait()
вызывается раньше group.enter()
. Я правильно использую DispatchGroup()
или мне следует попробовать что-то еще?