다중 완료 블록이 완료된 후 실행되는 기능

user172902

두 개의 완료 블록이 완료된 경우에만 실행하고 싶은 기능이 있습니다 (그리고 어느 것이 먼저 완료해야하는지 알 수 없음). 아래는 작동하는 내 시도입니다. 그러나 그것은 매우 지저분하고 내가 기다리고 싶은 완료 블록이 세 개 이상 있으면 모든 곳에 플래그가 있습니다. 더 예쁜 방법이 있는지 궁금합니다.

class TestClass: UIViewController {
    var blockOneComplete = false
    var blockTwoComplete = false

    func blockOneDownloadImageDescription(completion:()->Void) {
        downloadAsyncWithCompletion {
            blockOneComplete = true 
            if self.blockTwoComplete == true {
                self.allDataDownloadCompleted()
            } else {
                // Do nothing and wait for block Two to complete
            }
        }
    }

    func blockTwoDownloadImageData(completion:()->Void) {
        downloadAsyncWithCompletion {
            blockTwoComplete = true 
            if self.blockOneComplete == true {
                self.allDataDownloadCompleted()
            } else {
                // Do nothing and wait for block One to complete
            }
        }
    }

    func allDataDownloadComplete() {
        // Execute this funciton after all Async Download has complete
    }
}

-최종 결과로 업데이트-이 웹 사이트에 설명 된 내용이 정확히 내가 필요로하는 것이 밝혀졌습니다. 디스패치 그룹을 사용하여 여러 웹 서비스를 기다립니다.

최종 솔루션에는 dispatch_group_enter 및 dispatch_group_leave가 포함되어 있기 때문에 이것이 주석에 언급 된 SO 질문의 중복이 아니라고 생각합니다.

잭 콴

플래그를 관리하지 않으려면이를 달성하기 위해 dispatch_group기능적 반응 프로그래밍 라이브러리 를 사용 하거나 사용해야합니다 RxSwift.

그러나 하나의 카운터 플래그를 사용하고 함수를 호출하거나 NSNotificationif is for another를 사용할 ViewController있습니다.

내 프로젝트 중 하나에서 completion block일부 함수를 호출하기 전에 4 개 중 3 개 이상 이 완료 되었는지 확인해야 합니다. 나는 다음과 같이 그것을한다.

class TestClass: UIViewController {
    var numberOfBlockCompleted = 0

    func blockOneDownloadImageDescription(completion:()->Void) {
        downloadAsyncWithCompletion {
            numberOfBlockCompleted += 1 
            self.allDataDownloadCompleted()
        }
    }

    func blockTwoDownloadImageData(completion:()->Void) {
        downloadAsyncWithCompletion {
            numberOfBlockCompleted += 1 
            self.allDataDownloadCompleted()
        }
    }

    func blockThreeDownloadImageDesc(completion:()->Void) {
        downloadAsyncWithCompletion {
            numberOfBlockCompleted += 1
            self.allDataDownloadCompleted()
        }
    }


    func allDataDownloadComplete() {
        if numberOfBlockCompleted == 3 {
            //do something
        }
    }
}

제 생각에는 앱이 얼마나 복잡한 지에 따라 크게 달라집니다. 한두 부분 만 있으면 플래그로 충분합니다. 그러나 앱이 주로 네트워크 호출을 연결하고 라이브 주식 앱처럼 완료 될 때까지 기다려야하는 다른 서버에서 가져 오는 데 의존하는 경우 GCD에 대한 강력한 지식이나 기능적 반응 프로그래밍을 사용하면 작업이 더 쉬워집니다. 장기적으로.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 기능이 완료된 후 기능 실행

분류에서Dev

비동기 적으로 실행 된 블록이 완료되기를 기다리는 중

분류에서Dev

nodejs는 여러 기능이 완료된 후 무언가를합니다.

분류에서Dev

res.render는 이전 기능이 완료된 후에 만

분류에서Dev

다른 기능이 완료되면 기능 실행

분류에서Dev

다른 기능이 완료되었을 때만 기능 실행

분류에서Dev

Jest는 테스트 실행이 완료된 후 1 초 후에 종료되지 않았습니다. firebase rt db

분류에서Dev

하나의 jquery 행이 다른 행이 완료된 후에 만 실행되도록하는 방법

분류에서Dev

콜 러블 목록에서 완료되는 즉시 완료된 콜 러블 반환 값을 기다립니다.

분류에서Dev

AWS Lambda Node.js는 비동기 HTTP 요청이 완료된 후 this.emit을 실행합니다.

분류에서Dev

Wix Installer는 기본 설치가 완료된 후 msi를 실행합니다.

분류에서Dev

Wix Installer는 기본 설치가 완료된 후 msi를 실행합니다.

분류에서Dev

값 집합이 완료된 후 새 행

분류에서Dev

실행 완료 후 Jenkins 작업이 중지되지 않음

분류에서Dev

다른 작업이 완료된 후 루프 수행

분류에서Dev

다른 기능이 완료되었을 때만 한 기능 실행

분류에서Dev

CABasicAnimation이 완료된 후 다시 시작하는 방법

분류에서Dev

다른 앱이 완료된 후 ahk 스크립트를 종료하는 방법

분류에서Dev

다운로드가 완료된 후 실행되는 PowerShell 스크립트에 토렌트 이름 추가

분류에서Dev

첫 번째 기능이 완전히 완료된 후에 만 두 번째 Javascript 기능을 실행하는 방법은 무엇입니까?

분류에서Dev

양식 계산 기능이 완료된 후 모달 창 열기

분류에서Dev

이전 실행이 완료되기를 기다리는 동안 블록을 통해 반복

분류에서Dev

중첩 완료 블록이있는 NSBlockOperation

분류에서Dev

중첩 된 ActionSheetPicker, 다른 완료 블록 내의 선택기

분류에서Dev

로컬 바이트 실행 방법이 완료된 후 소거 버퍼이다?

분류에서Dev

Grunt-이전 작업이 완료된 후 실행할 작업 대기열

분류에서Dev

모든 것이 완료된 후 또는 exec가 완료된 후 create_resource를 실행하십시오.

분류에서Dev

Android에서 일부 기능이 완료되기를 기다리는 중

분류에서Dev

이전에 기능 완료를 기다리지 않는 기능?

Related 관련 기사

  1. 1

    다른 기능이 완료된 후 기능 실행

  2. 2

    비동기 적으로 실행 된 블록이 완료되기를 기다리는 중

  3. 3

    nodejs는 여러 기능이 완료된 후 무언가를합니다.

  4. 4

    res.render는 이전 기능이 완료된 후에 만

  5. 5

    다른 기능이 완료되면 기능 실행

  6. 6

    다른 기능이 완료되었을 때만 기능 실행

  7. 7

    Jest는 테스트 실행이 완료된 후 1 초 후에 종료되지 않았습니다. firebase rt db

  8. 8

    하나의 jquery 행이 다른 행이 완료된 후에 만 실행되도록하는 방법

  9. 9

    콜 러블 목록에서 완료되는 즉시 완료된 콜 러블 반환 값을 기다립니다.

  10. 10

    AWS Lambda Node.js는 비동기 HTTP 요청이 완료된 후 this.emit을 실행합니다.

  11. 11

    Wix Installer는 기본 설치가 완료된 후 msi를 실행합니다.

  12. 12

    Wix Installer는 기본 설치가 완료된 후 msi를 실행합니다.

  13. 13

    값 집합이 완료된 후 새 행

  14. 14

    실행 완료 후 Jenkins 작업이 중지되지 않음

  15. 15

    다른 작업이 완료된 후 루프 수행

  16. 16

    다른 기능이 완료되었을 때만 한 기능 실행

  17. 17

    CABasicAnimation이 완료된 후 다시 시작하는 방법

  18. 18

    다른 앱이 완료된 후 ahk 스크립트를 종료하는 방법

  19. 19

    다운로드가 완료된 후 실행되는 PowerShell 스크립트에 토렌트 이름 추가

  20. 20

    첫 번째 기능이 완전히 완료된 후에 만 두 번째 Javascript 기능을 실행하는 방법은 무엇입니까?

  21. 21

    양식 계산 기능이 완료된 후 모달 창 열기

  22. 22

    이전 실행이 완료되기를 기다리는 동안 블록을 통해 반복

  23. 23

    중첩 완료 블록이있는 NSBlockOperation

  24. 24

    중첩 된 ActionSheetPicker, 다른 완료 블록 내의 선택기

  25. 25

    로컬 바이트 실행 방법이 완료된 후 소거 버퍼이다?

  26. 26

    Grunt-이전 작업이 완료된 후 실행할 작업 대기열

  27. 27

    모든 것이 완료된 후 또는 exec가 완료된 후 create_resource를 실행하십시오.

  28. 28

    Android에서 일부 기능이 완료되기를 기다리는 중

  29. 29

    이전에 기능 완료를 기다리지 않는 기능?

뜨겁다태그

보관