2017-11-16 7 views
0

私はこの問題を抱えていますが、firebaseデータベースからデータを取得しようとしていますが、それはキーではありません。これはオブジェクトクラスです。Swift 4コードでsetValuesForKeysを呼び出すとエラーが発生します

class User: NSObject { 
    var firstname: String? 
    var lastname: String? 
    var username: String? 
    var profilepic: String? 
} 

、これは私が

func getusers(){ 
     ref.child("Friends").child(currentuser!).observe(.childAdded, with: { (snapshot) in 
      print(snapshot) 
      if let dic = snapshot.value as? [String: AnyObject]{ 
       let user = User() 
       user.setValuesForKeys(dic) 
       print(user.firstname, user.lastname) 

       DispatchQueue.main.async { 
        self.tableview.reloadData() 
       }} 
     }) { (error) in 
      print(error.localizedDescription) 
     } 

    } 

を取得しようとしていると、クラッシュがここにuser.setValuesForKeys(dic)です。

誰もがなぜ動作していないのか考えていますか?

+0

あなたは確かにprofilepicは文字列ですか? – PeejWeej

+0

はい。そのURLの絶対文字列 –

+0

"profilepic":url.absoluteString –

答えて

0

が、この代わりに試してみてください:

@objcMembers 
class User: NSObject { 
    ... 
} 

setValuesForKeys APIは、Foundationフレームワークによって実装とObjective-Cとの互換性を必要としています。

スウィフトコードをObjective-Cに公開するためのルールは、Swift 4でかなり変更されています。詳細はcheck the evolution proposalをご覧ください。

ユーザクラスデザイン。 4つのプロパティのいずれかがFirebaseから欠けている場合は、クラスデザインが適切であるかもしれません。それ以外の場合は、固定プロパティーを非オプションとして宣言し、代わりにイニシャライザーを作成することを検討してください。

0
はこれにあなたのユーザ宣言を変更

:あなたが明示的にそれらを公開しない限り、

class User: NSObject { 
    @objc var firstname: String? 
    @objc var lastname: String? 
    @objc var username: String? 
    @objc var profilepic: String? 
} 

はスウィフト4では、Objective-Cのは、インスタンスのプロパティを参照することはできません。

関連する問題