Преобразовать FIRDataSnapshot в пользовательский тип

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

Когда я запускаю приведенный ниже код, на консоль выводится дерево JSON с каждым дочерним элементом, содержащим имя, номер и адрес электронной почты.

Поэтому я хочу сохранить снимок как пользовательский тип "PersonInfo", который имеет каждое из этих свойств. Таким образом, я могу изменить эти данные в моем приложении. Мне нужно использовать переменную "PersonInfo", в которой я храню эти данные в различных частях моего приложения.

    ref.observeSingleEventOfType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in

        print(snapshot)

    })

2 ответа

Вы можете определить пользовательский класс PersonInfo, который будет действовать как модель.

class PersonInfo: NSObject {
    var pName: String
    var pNumber :String
    var pEmail: String
    let ref: FIRDatabaseReference?

    init( name: String, number: String, email: String) {
        self.pName = name
        self.pNumber = number
        self.pEmail = email
        self.ref = nil
    }

    init(snapshot: FIRDataSnapshot) {
        pName = snapshot.value!["pName"] as! String
        pNumber = snapshot.value!["pNumber"] as! String
        pEmail = snapshot.value!["pEmail"] as! String
        ref = snapshot.ref
    }

    convenience override init() {
        self.init(name:"",number: "", email: "")
    }
}

И внутри вашего observeSingleEventOfType когда у тебя есть snapshot, вы можете перебрать его потомков и выбрать каждого человека как:

for item in snapshot.children{
  var person = PersonInfo(snapshot:item);
  yourList.append(person);
}

Итак, у вас будет список PersonInfo моделировать объекты, к которым вы можете получить доступ позже.

В цели c вы можете сделать так:

Заголовочный файл:

#import <Foundation/Foundation.h>
#import <FirebaseDatabase/FirebaseDatabase.h>

@interface RTAObject : NSObject

@property (nonatomic) NSString pName;
@property (nonatomic) NSString * pNumber;
@property (nonatomic) NSString * pEmail;

-(id) init:(NSString) pName : (NSString*) name :(NSString*) pNumber :(NSString*) pEmail ;

@end

Исходный файл:

#import "PersonInfo.h"

@implementation RTAObject


-(id)init:(FIRDataSnapshot *)snapshot {

     _pName = [snapshot valueForKey:@"name"];
     _pNumber = [snapshot valueForKey:@"number"];
     _pEmail = [snapshot valueForKey:@"email"];

     return self;
}

-(id) init:(NSString *)pName:(NSString *)pNumber :(NSString *)pEmail 
{

    _pName = pName;
    _pNumber = pNumber;
    _pEmail = pEmail;

    return self; 
}
@end
Другие вопросы по тегам