以下の例のコードでは、エラーの場合はcomplete(false)
を呼び出します。しかし、私はDispatchGroup
オブジェクトを使用してすべての非同期要求が完了したことを確認しているので、notify
が呼び出され、complete(true)
が含まれ、を返すべきときにこの関数がtrue
を返すようにすると、失敗時にsyncGroup.leave()
を呼び出すことはできません。失敗のために。DispatchGroupを使用してforループ内で非同期呼び出しを行う方法
正しく機能しないとsyncGroup.leave()
に電話しないのは正しいですか?または、私はsyncGroup.leave()
と呼んで何とか結果が何であるかを判断しようとしているので、失敗したらfalse
を返すことができますか?
let syncGroup = DispatchGroup()
syncGroup.enter()
for track in unsynced {
register(time: time, withCompletion: { (success: Bool) ->() in
if success {
self.debug.log(tag: "SyncController", content: "Registered")
syncGroup.leave()
}
else {
complete(false)
}
})
}
//all requests complete
syncGroup.notify(queue: .main) {
self.debug.log(tag: "SyncController", content: "Finished registering")
complete(true)
}
あなたのアプローチには欠陥があります。達成したいことを考えなければなりません。おそらく、複数のコールバック(おそらく 'track'とtrue/falseの結果を渡す)を受け取るか、コールバックを一度呼び出すだけですが、トラック/ステータスの配列を渡すようにしてください。 – Paulw11