Я хотел бы иметь глобальный func signIn
, который я мог бы использовать внутри своего приложения, но моя проблема в том, что мне нужно вызвать несколько functions
после создания пользователя. Я думал, что мог бы использовать completion handler
для этого, но я попробовал это так, что дает мне ошибку:
static func signIn(credentials: Any?, username: String, finished: () -> Void){
Auth.auth().signIn(with: credentials as! AuthCredential, completion: { (user, error) in
if error != nil {
Utilities.showErrorPopUp(labelContent: "Fehler bei Kontoerstellung", description: error!.localizedDescription)
} else {
//user was created successfully; store name, username and UID
let db = Firestore.firestore()
let userID = user!.user.uid
db.collection("users").document(userID).setData(["username": username, "uid": user!.user.uid]) { (error) in
if error != nil {
Utilities.showErrorPopUp(labelContent: "Fehler", description: error!.localizedDescription)
}
}
// generate empty "Main Wishlist"
db.collection("users").document(userID).collection("wishlists").document("Main Wishlist").setData(["name": "Main Wishlist", "listIDX": 1]) { (error) in
if error != nil {
Utilities.showErrorPopUp(labelContent: "Fehler", description: error!.localizedDescription)
}
}
// set user status to logged-in
UserDefaults.standard.setIsLoggedIn(value: true)
UserDefaults.standard.synchronize()
finished()
}
})
}
Ошибка:
Escape замыкание захватывает неэкранирующий параметр 'Закончено'
До изменения мой function
выглядел следующим образом:
Auth.auth().signIn(with: credentials, completion: { (user, error) in
if error != nil {
Utilities.showErrorPopUp(labelContent: "Fehler bei Kontoerstellung", description: error!.localizedDescription)
} else {
//user was created successfully; store name, username and UID
let db = Firestore.firestore()
let userID = user!.user.uid
db.collection("users").document(userID).setData(["username": username, "uid": user!.user.uid]) { (error) in
if error != nil {
Utilities.showErrorPopUp(labelContent: "Fehler", description: error!.localizedDescription)
}
}
// generate empty "Main Wishlist"
db.collection("users").document(userID).collection("wishlists").document("Main Wishlist").setData(["name": "Main Wishlist", "listIDX": 1]) { (error) in
if error != nil {
Utilities.showErrorPopUp(labelContent: "Fehler", description: error!.localizedDescription)
}
}
// set user status to logged-in
UserDefaults.standard.setIsLoggedIn(value: true)
UserDefaults.standard.synchronize()
// stop animation
self.logoAnimation.stop()
//transition to home
self.transitionToHome()
}
})
}
Как вы можете видеть в этом примере, я звоню self.logoAnimation.stop()
и self.transitionToHome()
.
Как я могу превзойти метод, но при этом вызывать методы, когда пользователь зарегистрирован?
Если что-то неясно, просто дайте мне знать:)