Группа рассылки для вложенного цикла - PullRequest
0 голосов
/ 17 января 2020

У меня есть расширение для нескольких пользователей, и я могу выбрать несколько пользователей и несколько изображений для всех выбранных пользователей. Для этого я использовал группу рассылки, и есть два l oop 1 для всех пользователей и внутри этого l oop для всех выбранных изображений.

let myGroup = DispatchGroup()
let myGroupMain = DispatchGroup()
let dispatchQueue = DispatchQueue.global(qos: .background)
dispatchQueue.async {
for indexPath in self.indexPathContain  {
 myGroupMain.enter()

 for (index, attachment) in (content.attachments as! [NSItemProvider]).enumerated() {
   myGroup.enter()
  let paramDict = [
   "id":"0",
   "chat_id":modelList.id!,
   "sender_id":  x,
   "image":"",
   "receiver_id": modelList.sender_id!,
   "type": "1",
   "message": "",
   "file":dataArr,
   ] as [String : Any]
   self?.socket?.emit("upload_files", paramDict)
    myGroup.leave()
 }
 myGroup.notify(queue: .main) {
            myGroupMain.leave()
        }
}
 myGroupMain.notify(queue: .main) {

       self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
                print(i)
           }

}

В приведенном выше случае, когда я выполню, он будет myGroupMain.notify без полного myGroup l oop завершения. Swift 5 / Xcode 11,3

1 Ответ

0 голосов
/ 17 января 2020

Раньше я сталкивался с такой же проблемой. Я исправил проблему, определив глобально myGroup и myGroupMain.

Пожалуйста, см. Код ниже.

class ClassName {

    let myGroup = DispatchGroup()
    let myGroupMain = DispatchGroup()
    let dispatchQueue = DispatchQueue.global(qos: .background)

    func yourCode(){
        dispatchQueue.async {
            for indexPath in self.indexPathContain  {
                myGroupMain.enter()

                for (index, attachment) in (content.attachments as! [NSItemProvider]).enumerated() {
                    myGroup.enter()
                    let paramDict = [
                        "id":"0",
                        "chat_id":modelList.id!,
                        "sender_id":  x,
                        "image":"",
                        "receiver_id": modelList.sender_id!,
                        "type": "1",
                        "message": "",
                        "file":dataArr,
                        ] as [String : Any]
                    self?.socket?.emit("upload_files", paramDict)
                    myGroup.leave()
                }
                myGroup.notify(queue: .main) {
                    myGroupMain.leave()
                }
            }
            myGroupMain.notify(queue: .main) {

                self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
                print(i)
            }

        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...