Преобразовать 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