Вызов 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 не может видеть свойства вашего экземпляра, если вы не предоставите их явно.