Эта проблема заключается в том, как определяется массив. Простой пример
let myArray = ["some_key": "some_value"]
определяется как массив [String: String]
, а
let myArray = ["some_key": 5]
определяется как массив [String: Int]
Ваш массив
[
"email": GameManager.instance.getEmail(),
"userNameLowered": GameManager.instance.getUsername().lowercased(),
.
.
"scoreBadgeDictionary" : ["some key": "some value"]
]
, где, я предполагаю, GameManager.instance.getTopScoreWithBadgeDictionary () возвращает словарь.
Так что массив не соответствует [String: String] или [String: Int]. Однако он соответствует более обобщенному c [String: Any], так что это то, что вам нужно, чтобы «сообщить» переменную.
let myArray: [String: Any] = [
"email": "Hello",
"userNameLowered": "hello",
"scoreBadgeDictionary" : [1: "some score"],
"scoreVehicleDictionary" : [2: "some vehicle"]
]
Однако, и это важный бит, словари, возвращаемые в getTopScoreWithVehicleDictionary
, который является [Int: String] или [Int: Int], не будет работать с Firebase.
Ключи Firebase должны быть строками , поэтому попытайтесь написать это [1: «Hello, World] будет создавать sh. Принимая во внимание, что массивы в Firebase имеют номера c индексов и
, если данные выглядят как массив, Firebase будет отображать их как массив.
Я бы предложил переосмыслить эту структуру - возможно, приведение Int к строке будет вариантом, но это может не сработать для вашего варианта использования.