Вызов setValuesForKeys не выполняется в моем коде Swift 4

У меня возникла эта проблема, я пытаюсь получить данные из базы данных Firebase, но он говорит, что profilepic не является ключом, но это так. Это класс объекта.

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),

У кого-нибудь есть идеи, почему не работает?

2 ответа

Попробуйте это вместо этого:

@objcMembers
class User: NSObject {
    ...
}

setValuesForKeys API реализован на платформе Foundation и требует совместимости с Objective-C.

Правила предоставления кода Swift Objective-C значительно изменились в Swift 4. Пожалуйста, ознакомьтесь с предложением об эволюции для получения дополнительной информации.

Дизайн пользовательского класса. Если какое-либо из четырех свойств может отсутствовать в Firebase, возможно, вам подойдет дизайн вашего класса. В противном случае рассмотрите возможность объявления фиксированных свойств как необязательных и создания вместо них инициализатора.

Измените свое заявление пользователя на это:

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

В Swift 4 Objective-C не может видеть свойства вашего экземпляра, если вы не предоставите их явно.

Другие вопросы по тегам