#ios #firebase #firebase-realtime-database #swift3
#iOS #firebase #firebase-realtime-database #swift3
Вопрос:
Я конвертирую свой проект Swift 2 в Swift 3. Теперь я использую Firebase для своих данных, и у меня есть эта функция:
self.ref.child("languages").observeSingleEvent(of: .value, with: { (snapshot) in
let languages = snapshot.value as! [String : AnyObject]
var languageList = [Language]()
for (key, value) in languages {
let tempLanguage = Language()
tempLanguage.objectId = key
tempLanguage.code = value["code"] as! String
tempLanguage.desc = value["fulldesc"] as! String
languageList.append(tempLanguage)
}
handler(success: languageList, failure: nil)
}) { (error) in
handler(nil, error)
}
Это было нормально в swift 2, но теперь в Swift 3 я получаю сообщение об ошибке в строке. Ошибка заключается в следующем:
Не удается преобразовать значение типа (AnyObject?) -> Void в ожидаемый тип аргумента ((Ошибка) -> Void)?
Я удалил функцию и с автозаполнением написал ее снова, и это та же проблема.
Ответ №1:
Просто измените свой код на :-
FIRDatabase.database().reference().child("languages").observeSingleEvent(of: .value, with: { (snapshot) in
let languages = snapshot.value as! [String : AnyObject]
var languageList = [Language]()
for (key, value) in languages {
let tempLanguage = Language()
tempLanguage.objectId = key
tempLanguage.code = value["code"] as! String
tempLanguage.desc = value["fulldesc"] as! String
languageList.append(tempLanguage)
}
handler(success: languageList, failure: nil)
}, withCancel: {(error) in
handler(nil, error)
})
Комментарии:
1. Вы были правы. Проблема заключалась в обработчике. Объект ошибки больше не имеет типа AnyObject, а просто Any.