Arrays Can';t将字典转换为数组。敏捷的

Arrays Can';t将字典转换为数组。敏捷的,arrays,swift,dictionary,Arrays,Swift,Dictionary,嗯,我完全糊涂了。我正在尝试从字典中获取密钥数组。这是我写的: if (customerViewModel.customer._dynamicMonthCount != nil) { var array = customerViewModel.customer._dynamicMonthCount var months_keys = Array(arrayLiteral: array!.keys) //that does not work } 正如您所理解的,“\u dynam

嗯,我完全糊涂了。我正在尝试从字典中获取密钥数组。这是我写的:

if (customerViewModel.customer._dynamicMonthCount != nil) {
    var array = customerViewModel.customer._dynamicMonthCount
    var months_keys = Array(arrayLiteral: array!.keys) //that does not work
}
正如您所理解的,“\u dynamicMonthCount”是一本字典:

var _dynamicMonthCount:Dictionary<String,Int>?
var\u dynamicMonthCount:字典?
当我从服务器获取json格式的数据时,我给它赋值。(实际上,该字典是作为字典的JSON对象)

但是,每次调试程序时,我都会看到数组是[LazyMapCollection]

我用不同的数组尝试了一下,效果很好:

let dictionary = var regions:Dictionary<String,Int> = [...]  //my static dictionary
var values = Array(dictionary.values) //that works 
var keys = Array(dictionary.keys) //that works
let dictionary=var regions:dictionary=[…]//我的静态字典
var values=Array(dictionary.values)//这很有效
var keys=Array(dictionary.keys)//有效

这是否意味着可选类型和动态数据中的唯一问题?我不知道,帮帮我,伙计们,请删除
arrayletral:
这个东西就行了

var months_keys = Array(array!.keys) //that does not work
arrayLiteral
初始值设定项的使用方式如下:

var month_keys = Array(arrayLiteral: 1, 2, 3, 4) 
// will produce an array with items: 1, 2, 3 and 4
您应该调用的是
(\uu:SequenceType)
初始值设定项,因为
LazyMapCollection
符合该协议

有关代码的更多提示:

  • 如果变量的值不会更改,则使用
    let
    声明它,而不是
    var

  • 您可以简化此操作:

-

为此:

if let dictionary = customerViewModel.customer._dynamicMonthCount {
    var months_keys = Array(dictionay!.keys)
}

只要删除
arrayLiteral:
这个东西,它就可以工作了

var months_keys = Array(array!.keys) //that does not work
arrayLiteral
初始值设定项的使用方式如下:

var month_keys = Array(arrayLiteral: 1, 2, 3, 4) 
// will produce an array with items: 1, 2, 3 and 4
您应该调用的是
(\uu:SequenceType)
初始值设定项,因为
LazyMapCollection
符合该协议

有关代码的更多提示:

  • 如果变量的值不会更改,则使用
    let
    声明它,而不是
    var

  • 您可以简化此操作:

-

为此:

if let dictionary = customerViewModel.customer._dynamicMonthCount {
    var months_keys = Array(dictionay!.keys)
}

字典的变量
数组
非常容易混淆。还要考虑(几乎)代码中的所有变量都应该是常量(<代码>让/<代码>),你不应该直接使用<代码>数组(AlrayLimal::/Calp:RealAlistor)(它是指编译器在使用数组文字时使用)——只使用<代码>数组(“:”)< /Calp>初始化器代替…就像你在第二个例子中所做的那样!你对不起作用的
是什么意思?它会崩溃吗?它不能编译吗?它是否显示空数组?您还应该使用来打开词典,而不是
!=无
检查,然后强制展开。数组(:)-有效。将dictionary.keys转换为数组的。我使用“arrayLiteral”是因为警告。但这是个坏主意。谢谢你的评论!字典的变量
数组
非常容易混淆。还要考虑(几乎)代码中的所有变量都应该是常量(<代码>让/<代码>),你不应该直接使用<代码>数组(AlrayLimal::/Calp:RealAlistor)(它是指编译器在使用数组文字时使用)——只使用<代码>数组(“:”)< /Calp>初始化器代替…就像你在第二个例子中所做的那样!你对不起作用的
是什么意思?它会崩溃吗?它不能编译吗?它是否显示空数组?您还应该使用来打开词典,而不是
!=无
检查,然后强制展开。数组(:)-有效。将dictionary.keys转换为数组的。我使用“arrayLiteral”是因为警告。但这是个坏主意。谢谢你的评论!