[swift][초보자용] 통신 처리의 실행 순서에 대한 흔한 오류와 무명 함수 처리의 분할 방법
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을 표현해.
이렇게 함수를 분할할 수 있다.
Reference
이 문제에 관하여([swift][초보자용] 통신 처리의 실행 순서에 대한 흔한 오류와 무명 함수 처리의 분할 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yoneapp/articles/d378d9deef20d5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)