Невозможно вызвать инициализатор для типа 'String' со списком аргументов типа '(RemoteConfigValue)' - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь получить строку (внутри объекта) в Firebase (используя Swift)


let currentDocument = db.collection("countries").document("United States")

        currentDocument.getDocument { (document, error) in
            if let document = document, document.exists {
                let cities = document.data()!["cities"] as? [AnyObject] // This grabs data from a Firebase object named `cities`, inside the object there are arrays that have two pieces of data (e.g. ["cityName" : "New York", "currentTemperature" : 38])
                for i in 0..<cities!.count {
                    let cityName = String(cities![i]["cityName"]!) // Here is where I get the error `Cannot invoke initializer for type 'String' with an argument list of type '(RemoteConfigValue)'`
                }
            } else {
                print("Document does not exist")

            }
        }

После поиска этой ошибки обычные решения, которые я нашел, похожи на эти

Но даже после применения этих решений, например:


if let cityName = cities![i]["cityName"]! as? String {
  print(cityName)
}

Я все еще получаю сообщение об ошибке типа Cast from 'RemoteConfigValue' to unrelated type 'String' always fails

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Попробуйте это

let currentDocument = db.collection("countries").document("United States")

        currentDocument.getDocument { (document, error) in
            if let document = document, document.exists {
                let cities = document.data()!["cities"] // This grabs data from a Firebase object named `cities`, inside the object there are arrays that have two pieces of data (e.g. ["cityName" : "New York", "currentTemperature" : 38])
                for i in 0..<cities!.count {
                    if let cityName = cities[i]["cityName"]! as? String {
                      print(cityName)
                    }
                }
            } else {
                print("Document does not exist")

            }
        }
0 голосов
/ 29 марта 2019

Пожалуйста, прочитайте документацию

class RemoteConfigValue : NSObject, NSCopying

Этот класс предоставляет оболочку для значений параметров Remote Config, с методами для получения значений параметров, которые отличаютсятипы данных.

Таким образом, вы должны написать что-то вроде этого

if let cities = document.data()!["cities"] as? [[String:Any]] { // cities is obviously an array of dictionaries
   for city in cities { // don't use index based loops if you actually don't need the index
       if let cityName = city["cityName"] as? RemoteConfigValue {
          print(cityName.stringValue)
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...