2016-09-23 8 views
0

私は今、エラーのような行に表示Xcodeの8へのXcodeをアップグレードするまで、私はうまく機能してきたFirebase担保のiOSアプリを持っていた:スウィフト3.0でFirebase Swift 3.0構文アップデート?

let state = child.value!["STATE"] as! String // Was correct in Swift 2.3

エラー:Value of type 'NSFastEnumerationIterator.Element' (aka 'Any') has no member 'value'

let name = (child as AnyObject).value!["NAME"] as! String

しかし、その戻り値:

スウィフト3.0に私のコードを変換した後、変更は、この内の構文を作りました私はスナップショット値にアクセスしようとすると、The Type 'Any' has no subscript members:■このエラー:

Type 'NSFastEnumerationIterator.Element' (aka 'Any') does not conform to protocol 'AnyObject'

また、私はこのエラーを取得しています。

Swift 3.0ではFirebaseのドキュメントが変更されていないため、ここで問題は何ですか?

完全なコードブロック:すべての助けを

self.firebase.child(“INFO”).observeSingleEvent(of: .value, with: { (snap: FIRDataSnapshot) in 

      for child in snap.children{ 

       if child.hasChild("NAME") && child.hasChild("ZIP-CODE") && child.hasChild("STATE"){ 

         let name = child.value!["NAME"] as! String 
          let zip = child.value!["ZIP-CODE"] as! String 
          let state = child.value!["STATE"] as! String 

       } 
      } 

     }) 

おかげで、それが大幅に高く評価されます!

答えて

1

私は推測していますがXcodeのは、どのようなタイプのこのスナップショットもに属さないためにと混同つながるかもしれないどの、任意の型にイベントからあなた取り出さスナップショットをキャストしていませんか?

FIRDatabase.database().reference().observeSingleEvent(of : .value, with : {(Snapshot) in 

     if let snapDict = Snapshot.value as? [String:AnyObject]{ 
      for child in snapDict{ 

       if let name = child.value["NAME"] as? String{ 

        print(name) 
       } 
       if let zip = child.value["ZIP-CODE"] as? String{ 

        print(zip) 
       } 
       if let state = child.value["STATE"] as? String{ 

        print(state) 
       } 
      } 
     } 
    }) 
+0

残念ながら、それは私の問題を解決していませんでした。私はちょうどあなたのための完全なコードを更新しました –

+0

FIRDataSnapshotの.valueを直接呼び出すたびに、エラーが読み込まれます: 'タイプ 'Any'には添え字メンバーがありません。 ' –

+0

Happy Coding! :) –

0

NSDictionaryとしてchild.valueをキャストしようとしましたか?私はfirebaseのスナップショットを鋳造し、次のように(あなたの状況に合わせて)値にアクセスすることに成功しました。

self.firebase.child(“INFO”).observeSingleEvent(of: .value, with: { (snap: FIRDataSnapshot) in 

     for child in snap.children{ 
      let childValue = child.value as? NSDictionary 

      if child.hasChild("NAME") && child.hasChild("ZIP-CODE") && child.hasChild("STATE"){ 

        let name = childValue!["NAME"] as! String 
         let zip = childValue!["ZIP-CODE"] as! String 
         let state = childValue!["STATE"] as! String 

      } 
     } 

    }) 
0

我々は、同様の問題に直面したいくつかの理由(FIRDataSnapshotから改称)DataSnapshotとして子供を書き直す必要がありました。

したがって、このような何か:

query.observeSingleEvent(of: .value, with: { (snapshot) in 
     for childSnapshot in snapshot.children { 
      if let childSnapshot = childSnapshot as? DataSnapshot, 
       let data = childSnapshot.value 
       // Do stuff with data 
      } 
     } 
    })