Ну, я совершенно смущен. Я пытаюсь получить массив ключей из словаря. Это то, что я писал:Невозможно преобразовать словарь в массив. Swift
if (customerViewModel.customer._dynamicMonthCount != nil) {
var array = customerViewModel.customer._dynamicMonthCount
var months_keys = Array(arrayLiteral: array!.keys) //that does not work
}
Ну, как вы поняли, «_dynamicMonthCount» является словарем:
var _dynamicMonthCount:Dictionary<String,Int>?
Я даю ему значение, как я получаю данные от сервера в формате JSON. (На самом деле, этот словарь - это JSON Object в качестве словаря).
НО, каждый раз, когда я отлаживаю программу, я вижу, что массив [LazyMapCollection < [String: Int], String>].
Я пробовал с разным массивом, и она работает:
let dictionary = var regions:Dictionary<String,Int> = [...] //my static dictionary
var values = Array(dictionary.values) //that works
var keys = Array(dictionary.keys) //that works
Означает ли это, что единственная проблема в опциональном типе и динамических данных? Я не знаю, помогите мне, ребята, пожалуйста
переменная 'array' для * словаря * очень запутанным. Считайте также, что (почти) все * переменные * в вашем коде должны быть константами ('let') – vadian
Вам никогда не придется использовать инициализатор' Array (arrayLiteral:) 'непосредственно (он предназначен для использования компилятором при работе с литералами массива) - просто используйте вместо этого 'Array (_ :)' initialiser ... как вы делаете в своем втором примере! – Hamish
Что вы имеете в виду с 'том, что не работает'? Это крушение? Не удается ли его скомпилировать? Показывает пустой массив? – EmilioPelaez