Я пытаюсь сгенерировать уникальный идентификатор пользователя 8 di git в качестве ключа для моего пользователя в моей базе данных Firebase по сравнению с 28 di git, созданным в Firebase.
В функции я хочу создать случайную переменную и затем проверить ее по базе данных, чтобы увидеть, существует ли она. Если он существует в базе данных, я хочу вызывать рекурсивно, пока не будет создан уникальный ключ.
Я пытался
func createUniqueID() -> String {
let userID = generateUserID()
let ref = Database.database().reference(withPath: "users")
ref.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChild(userID) {
return createUniqueID() //errors here
}
else {
return userID //errors here
}
})
}
, но я получаю ошибки в обеих обратных линиях при закрытии базы данных "Неожиданное возвращаемое значение в void функции"
Я пытался сделать это как встроенная функция
func wtf() -> String {
let userID = "123456"//generateUserID()
func doesUserIDExistAlready(userID: String, complete: @escaping(String) -> ()) {
let ref = Database.database().reference(withPath: "users")
ref.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChild(userID) {
complete( self.wtf() )
}
else {
complete( userID )
}
})
}
doesUserIDExistAlready(userID: userID) { userID in
return userID //warning here
}
}
, но я получаю предупреждение о том, что "выражение типа 'String' не используется" при возврате userID
Я также пытался использовать встроенную функцию без завершения, но возвращая строка
func wtf2() -> String {
let userID = "123456"//generateUserID()
func doesUserIDExistAlready(userID: String) -> String {
let ref = Database.database().reference(withPath: "users")
ref.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChild(userID) {
return self.wtf2() //errors here
}
else {
return userID //errors here
}
})
}
return doesUserIDExistAlready(userID: userID)
}
, но я также получаю ошибки на обеих обратных линиях в закрытии пожарной базы "Неожиданное возвращаемое значение в void функции"
это возможно сделать?