2016-07-13 1 views
2

나는 아래의 코드를 실행할 때 JSON을변환 FIRDataSnapshot 나는 사용자 정의 유형에 FIRDataSnapshot 변환하려고

(I, 각각의 아이 는 이름, 번호, 이메일있을 것이라는 점을 알고 예) 이름, 번호 및 이메일이 포함 된 각 하위 항목이 콘솔에 표시됩니다.

그래서 스냅 샷을 각 속성이있는 "PersonInfo"사용자 정의 유형으로 저장하려고합니다. 그렇게하면 내 앱에서이 데이터를 변경할 수 있습니다. 나는이 데이터를 애플 리케이션의 다양한 부분에 저장하는 "PersonInfo"변수를 사용해야한다.

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

     print(snapshot) 

    }) 

답변

10

모델로 작동 할 사용자 정의 클래스 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 모델 객체의 목록을해야합니다 후에.

+1

그래서이 답을 사랑합니까. NSObject에 연결하는 대신 순수한 Swift 클래스 (클래스 Person {})가 될 수 있습니다. 사용 사례에 따라 다릅니다. – Jay

+2

우수 답변 - 우리는이 문제를 확실히 문서화해야합니다! –

0

목표 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 
관련 문제