2016-07-13 5 views
2

私は以下のコードを実行すると、JSONをコンバートFIRDataSnapshot私はカスタムタイプにFIRDataSnapshotを変換しようとしています

(私はそれぞれの子 は、名前、番号、および電子メールを持っているだろうことを知っているIE)ツリーには、各子が名前、番号、および電子メールのプリントをコンソールに表示します。

私はスナップショットを、それぞれのプロパティを持つカスタムタイプ "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: "") 
    } 
} 

そして、あなたがsnapshotを持っているとき、あなたはその子を反復処理すると、各個人を取得することができ、あなたのobserveSingleEventOfType内側:だから

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

、あなたがアクセスできるPersonInfoモデルオブジェクトのリストを持っています後で。

+1

私はこの答えを愛しています。あなたはそれをNSObjectに結び付けるのではなく、純粋なSwiftクラス(クラスPerson {})にすることができます。あなたのユースケースによって異なります。 – Jay

+2

優れた答え - 私たちは間違いなくドキュメントでこれをカバーする必要があります! –

0

Objective 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 
関連する問題