[swift][초보자용] 통신 처리의 실행 순서에 대한 흔한 오류와 무명 함수 처리의 분할 방법

이 예에 관해서 우리는 함수로 나누는 상황을 고려해 봅시다.
https://zenn.dev/yoneapp/articles/4f3efc0b70118c
override func viewDidLoad() {
    super.viewDidLoad()

    getUsers() // (a)
    showUsers() // (b)
}

func getUsers() {
    let db = Firestore.firestore()

    db.collection("users").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
             userDocuments = querySnapshot!.documents // (c)
        }
    }
}

func showUsers() {
  // ここに userDocuments を使うコードが書いてある
}
여기도 (a)->(c)->(b) 순서대로 집행되기를 기대하는 사람들이 많다.
실제로 (a)->(b)->(c) 순서대로 실행하지 못했습니다.
간단하게 수정하면 그렇습니다.
override func viewDidLoad() {
    super.viewDidLoad()

    getUsers() // (a)
}

func getUsers() {
    let db = Firestore.firestore()

    db.collection("users").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
             userDocuments = querySnapshot!.documents // (c)
             showUsers() // (b)
        }
    }
}

func showUsers() {
  // ここに userDocuments を使うコードが書いてある
}
벽장을 사은품으로 사용하면 이렇게 쓸 수도 있다.
override func viewDidLoad() {
    super.viewDidLoad()

    getUsers { [weak self] in
        self?.showUsers()
    }
}

func getUsers(completion: @escaping () -> Void) {
    let db = Firestore.firestore()

    db.collection("users").getDocuments { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
             userDocuments = querySnapshot!.documents
             completion()
        }
    }
}

func showUsers() {
  // ここに userDocuments を使うコードが書いてある
}
이렇게 쓰면
{ [weak self] in
    self?.showUsers()
}
가 열려 있으므로commpletion()처럼 ()를 추가하십시오.
그러면 ShowUsers()가 실행됩니다.
getDoocuments의 경우()
{ (querySnapshot, err) in
    if let err = err {
        print("Error getting documents: \(err)")
    } else {
         userDocuments = querySnapshot!.documents
         completion()
    }
}
부여, 비동기식 실행
느낌이 딱 비슷해, 무명 함수(복제인)로 commpletion을 표현해.
이렇게 함수를 분할할 수 있다.

좋은 웹페이지 즐겨찾기