2016-10-20 19 views
0

私が取り組んでいるプロジェクトの1つでは、私のデータベース内のさまざまな項目の複数の通知をスケジュールしています。ここにいくつかのコードがあります:Swift 3の複数のループに対する非同期コールバック

func setupNotifications() { 
    for medecine in medecineList! { 
     if !medecine.whichDaysArray.contains(Medecine.Days.EveryDay.rawValue) {   
      for day in medecine.whichDaysArrayDate { 
       for fTime in medecine.frequencyTimeDateArray { 
        self.createNotificationsForUniqueDays(parsedMedecine: medecine, parsedDay: day, parsedFTime: fTime) 
       } 
      } 
     } 
     else { 
      for fTime in medecine.frequencyTimeDateArray { 
       self.createNotificationsForEveryDay(parsedMedecine: medecine, parsedFTime: fTime) 
      } 
     } 
    } 
    self.callback() 
} 

func createNotificationsForEveryDay(parsedMedecine: Medecine, parsedFTime: Date) { 
    DispatchQueue.main.async { 
     // Create the notification 
    } 
} 

私は意図的に非同期スレッドに通知を作成する関数を配置しています。問題は、すべての非同期タスクがそのジョブの実行を終了したときにメソッドcallback()を呼び出すことです。私はこれを達成する方法を知りません。

ご協力いただきありがとうございます!

答えて

0

メソッドcreateNotificationsForEveryDayは、パラメータとしてブロックを持つ必要があります。そのブロックでは、私がfrequencyTimeDateArrayの最後のアイテムを処理したかどうかを確認し、それがあった場合はself.callback()に電話します。

+0

私は残念なことにそれを行うことはできません。あなたが見ることができるので、私は複数のループを持っています。 frequencyTimeDateArrayの1つの項目は、whichDatesArrayにいくつの項目があるかによって、何度も利用できます。そして前のelse/if節があるので、この最後の配列にはそのロジックを使用できません。最後に、私のコールバック関数が保留中の通知をすべて取得できるようにしたい。 – Croisciento

関連する問題