2017-12-20 1 views
0

현재 사용자가있을 때 사용자 데이터를 전달하는 기능을 코딩하려고합니다. 사용자 이름이 데이터베이스에 있으면 코드는 괜찮지 만 데이터베이스에 사용자 이름이 기록되어 있지 않으면 반환 함수를 갖는 방법을 알지 못합니다.사용자가 Swift 및 Firebase를 사용하여 사용자 이름으로 존재하는지 확인하십시오.

나는 이것이 내가 무슨 짓을, 초보자 해요 :

func observeUserByUsername(username: String, completion: @escaping (Userm?) -> Void) { 
     REF_USERS.queryOrdered(byChild: "username_lowercase").queryEqual(toValue: username).observeSingleEvent(of: .childAdded) { (snapshot) in 

     if let dict = snapshot.value as? [String: Any] { 
      let user = Userm.transformUser(dict: dict, key: snapshot.key) 
      completion(user) 
     } else { 
      print("no user") 
      completion(nil) 
     } 
     } 
} 

나는 이런 식으로 뭔가를하고 싶은 : 사용자가이 사용자 이름이있는 경우 -> (완성을위한) 반환 전무.

내가 어떻게 할 수 있는지 알고 있니?

답변

0

그래서 제대로 이해하면 사용자 이름이있는 사용자가 있는지 확인하고 싶습니다. firebase에 대한 경로를 입력하고 exist() 메소드를 사용하여이 서브 노드가 존재하는지 확인할 수 있습니다. 비슷한 방법이 있습니다. 프로젝트에 맞게 변경할 수 있습니다.

func checkUsernameAvailability(completion: @escaping (_ available:Bool)->()){ 
    guard let lowercasedText = usernameTextField.text?.lowercased() else {completion(false); return} 
    let ref = Database.database().reference().child("users").child("username").child(lowercasedText) 
    ref.observeSingleEvent(of: .value) { (snapshot) in 
     if snapshot.exists(){ 
      completion(false) 
      return 
     }else{ 
      completion(true) 
     } 
    } 
} 

Firebase는 대소 문자를 구분하지 않으므로 (항상 나는 소문자 버전을 확인하고 저장합니다). 예를 들어 하위 노드가 'UserName'이고 'username'이름을 검색하면 이미이 이름이 있음을 알 수 있습니다.

관련 문제