2016-09-15 20 views
1

swift 2を使用して完全に動作するプロジェクトを作成しました。次にxcodeを更新し、コードをSwift 3に変換しました。私はバックエンドとしてFirebaseを使用しています。これは私のコードです。swift 3タイプ 'Any'エラー

import Foundation 
import Firebase 
import FirebaseDatabase 
import FirebaseAuth 


struct User { 

var username: String! 
var email: String! 
var photoUrl: String! 
var country: String! 
var ref: FIRDatabaseReference? 
var key: String! 


init(snapshot: FIRDataSnapshot){ 

    key = snapshot.key 
    username = snapshot.value!["username"] as! String 
    email = snapshot.value!["email"] as! String 
    photoUrl = snapshot.value!["photoUrl"] as! String 
    country = snapshot.value!["country"] as! String 
    ref = snapshot.ref 

} 




} 

「Any」には添え字メンバーがありません。このエラーは、その中にsnapshot.valueを持つ行にあります。誰にどのようにこれを修正するための任意のアイデアを持っていますか?

答えて

4

のようなものについてはどう:

let values = snapshot.value as! Dictionary<String,String> 
username = values["username"] 
... 
+0

これは、エラーを修正しているようです!私は新しいプロジェクトを開始しなければなりませんでした。なぜなら、もう1つは本当に混乱してしまったからです。ありがとうございました。 – mavericklab

+0

これは答えですが、値は必ずしもStringではありません。それはNSNumberまたはNSDictionaryである可能性があります。 –

1

Xcodeの8ベータ版の前に6 snapshot.valuesタイプであった[文字列:ANYOBJECT]。ただ、それは

guard snapshot.exists() else { return } 
let value = snapshot.value as! [String:AnyObject] 
username = value["username"] as! String 
0

snapshot.value辞書、配列、文​​字列、などとすることもできるキャスト、スウィフト3に辞書を表現する方法に変更がありました。それは[String:AnyObject]から[String:Any]になりました。

これを行うための正しい方法は、安全に、このようなすべての値をアンラップすることを確認することです:

// swift 3  
if let userDict = snapshot.value as? [String:Any] { 
    username = userDict["username"] as? String 
} 
関連する問題