2016-03-09 4 views
3

Я запускаю приведенный ниже код, чтобы узнать, зарегистрирован ли пользователь, который открывает приложение, и затем проверить, настроили ли они профиль. Я имею проверку для значения нулевого значения возвращенного из проверки профиляFirebase, проверяющий нулевое значение (Swift)

override func viewDidLoad() { 
    super.viewDidLoad() 

    //Check to see if user is already logged in 
    //by checking Firebase to see if authData is not nil 
    if ref.authData != nil { 

     //If user is already logged in, get their uid. 
     //Then check Firebase to see if the uid already has a profile set up 
     let uid = ref.authData.uid 
     ref.queryOrderedByChild("uid").queryEqualToValue(uid).observeSingleEventOfType(.Value, withBlock: { snapshot in 
       let profile = snapshot.value 
       print(profile) 
     }) 

В последней строке при печати (профиль) проблемы, я либо получить информацию о профиле, или

<null> 

как проверить это значение?

if profile == nil 

не работает

Если я

let profile = snapshot.value as? String 

первый, то он всегда возвращает ноль, даже если есть snapshot.value

+0

попробовать, если (snapshot.value! = Ноль) {} или (snapshot.value, как! NSObject! = Ноль) {} –

+0

Благодаря Shrikant, но первый имеет ту же проблему. Второе предложение дает мне «Значение типа« NSObject никогда не может быть nil »error – FortuneFaded

+0

Что такое тип данных моментального снимка? –

ответ

24

Воспользоваться метода существует(), чтобы определить, если снимок содержит значение. Для использования вашего примера:

let uid = ref.authData.uid 
ref.queryOrderedByChild("uid").queryEqualToValue(uid) 
     .observeSingleEventOfType(.Value, withBlock: { snapshot in 

    guard snapshot.exists() else{ 
     print("User doesn't exist") 
     return 
    } 

    print("User \(snapshot.value) exists") 
}) 

.

Вот еще один полезный пример, Swift4

let path = "userInfo/" + id + "/followers/" + rowId 

    let ref = Database.database().reference(withPath: path) 

    ref.observe(.value) { (snapshot) in 

      let following: Bool = snapshot.exists() 

      icon = yesWeAreFollowing ? "tick" : "cross" 
     } 
+0

это удобный отзыв – Fattie

3

Вы можете изучить другой вариант : поскольку вы знаете uid пользователя и, следовательно, путь к этому пользователю, нет никаких причин для запроса. Запросы добавляют лишние накладные расходы в ситуациях, когда вы знаете путь.

Например

users 
    uid_0 
    name: "some name" 
    address: "some address" 

Вы гораздо лучше наблюдать узел в вопросе по значению, которое будет возвращать нулевое значение, если оно не существует

ref = "your-app/users/uid_0" 

ref.observeEventType(.Value, withBlock: { snapshot in 
    if snapshot.value is NSNull { 
     print("This path was null!") 
    } else { 
     print("This path exists") 
    } 
}) 

в случае, если вы храните его другим способом; возможно

random_node_id 
    uid: their_uid 
    name: "some name" 

, то запрос будет в порядке, как этот

ref.queryOrderedByChild("uid").queryEqualToValue(their_uid) 
    .observeEventType(.Value, withBlock: { snapshot in 

     if snapshot.exists() { 
      print("you found it!") 
     } 

    }); 
Смежные вопросы