2017-03-26 1 views
0

Firebase에서 사전 배열을 가져와 로컬 이퀄라이저로 전달하려고 시도하지만 기타 오류가 발생합니다. 장소 유형 사전의Firebase에서 사전 배열을 로컬 배열로 전달

struct Places { 
var type = "" 
var country = "" 
var name = "" 

init(type: String, country: String, name: String, image: String) { 
    self.type = type 
    self.country = country 
    self.name = name 
} 

그리고 지역 배열

var allPlaces:[Places] = [] 

그리고 여기가

   if let firebasePlaces = snapshot.value as? [String:AnyObject]{ 

       var localPlace:Places! 

       for firebasePlace in firebasePlaces{ 

        localPlace?.name = firebasePlace.value["name"] as! String 
        localPlace?.country = firebasePlace.value["country"] as! String 
        localPlace?.type = firebasePlace.value["type"] as! String 
        localPlace?.image = firebasePlace.value["image"] as! String 


        self.allPlaces.append(localPlace) 

       } 
     } 

나는 "가지고의 ViewController에 내 코드입니다 :

나는 구조체의 예를 아래에 있습니다 self.allPlaces.append (localPlace) 행에서 선택 값을 언 래핑하는 동안 예기치 않게 nil을 발견했습니다. 위의 예에서 내가 놓친 것은 누구나 아이디어를 가지고 있습니까?

답변

0

위 코드를 약간 변경하여 수정했습니다. 구조체처럼해야

지역 정보

struct Places { 
var type:String! 
var country:String! 
var name:String! 
var image:String! 

init(type: String, country: String, name: String, image: String) { 
    self.type = type 
    self.country = country 
    self.name = name 
    self.image = image 
} 

init(snapshot: FIRDataSnapshot) { 

    let snapshotValue = snapshot.value as! [String:AnyObject] 

    type = snapshotValue["type"] as! String 
    country = snapshotValue["country"] as! String 
    name = snapshotValue["name"] as! String 
    image = snapshotValue["image"] as! String 
} 

그리고

   var plc: [Places] = [] 
       for eachPlace in (snapshot.children){ 
       let place = Places(snapshot: eachPlace as! FIRDataSnapshot) 
       plc.append(place) 
       } 

       self.allPlaces = plc 
의 ViewController

에 코드 아래에