Получение данных Firebase после возврата метода [duplicate]

Самый простой способ - «искать»: (чтобы открыть контекст Ldap: посмотрите примеры выше)

 /**
  * Tests if an Active Directory user exists in an Active Directory group. 
  * @param ctx LDAP Context.
  * @param dnADGroup distinguishedName of group.
  * @param dnADUser distinguishedName of user.
  * @return True if user is member of group.
  */


public static boolean isMemberOfADGroup(LdapContext ctx, String dnADGroup, String dnADUser) {
  try {
   DirContext lookedContext = (DirContext) (ctx.lookup(dnADGroup));
   Attribute attrs = lookedContext.getAttributes("").get("member");
   for (int i = 0; i < attrs.size(); i++) {
    String foundMember = (String) attrs.get(i);
    if(foundMember.equals(dnADUser)) {
     return true;
    }
   }
  } catch (NamingException ex) {
   String msg = "There has been an error trying to determin a group membership for AD user with distinguishedName: "+dnADUser;
   System.out.println(msg);
   ex.printStackTrace();
  }
  return false;
 }
4
задан Frank van Puffelen 14 July 2016 в 01:52
поделиться

1 ответ

Это потому что, когда вы извлекаете данные из Firebase, вызов является асинхронным. Что вы можете сделать:

Вариант 1 - Установите логику внутри закрытия (например, что у вас есть, напечатайте var внутри закрытия).

Вариант 2 - Определите свое закрытие, которое получая ваши данные, такие как:

func myMethod(success:([String])->Void){

    ref?.observeEventType(.Value, withBlock: { snapshot in
        var newNames: [String] = []
        for item in snapshot.children {
            if let item = item as? FIRDataSnapshot {
                let postDict = item.value as! [String: String]
                newNames.append(postDict["name"]!)
            }
        }
        success(newNames)
    })
}

Вариант 3 - Использовать шаблон делегата

protocol MyDelegate{
     func didFetchData(data:[String])
}

class MyController : UIViewController, MyDelegate{

    func myMethod(success:([String])->Void){
        ref?.observeEventType(.Value, withBlock: { snapshot in
           var newNames: [String] = []
           for item in snapshot.children {
               if let item = item as? FIRDataSnapshot {
                   let postDict = item.value as! [String: String]
                   newNames.append(postDict["name"]!)
               }
            }
            self.didFetchData(newNames)
        })
    }

    func didFetchData(data:[String]){
        //Do what you want
    }

}
7
ответ дан José Roberto Abreu 15 August 2018 в 18:38
поделиться
  • 1
    Делегат-образец работал очень хорошо для того, что я хотел сделать с данными, спасибо! – Ted Marchildon 14 July 2016 в 13:47
Другие вопросы по тегам:

Похожие вопросы: