Не удается преобразовать значение типа в ожидаемый аргумент Firebase

#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.