2016-10-20 4 views
0

내가 진행하고있는 프로젝트 중 하나에서 데이터베이스의 여러 항목에 대한 여러 알림을 예약하고 있습니다. 일부 코드는 다음과 같습니다.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의 한 항목은 whichDatesArray에있는 항목 수에 따라 여러 번 사용할 수 있습니다. 그리고 전에이 else/if 절이 있기 때문에이 마지막 배열에 해당 논리를 사용할 수 없습니다. 결국 나는 콜백 함수가 보류중인 모든 알림을 검색 할 수있게하려고한다. – Croisciento