无法将字典转换为数组。迅速

时间:2016-09-08 15:25:49

标签: arrays swift dictionary

嗯,我完全糊涂了。我试图从字典中获取键数组。这就是我写的:

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 as Dictionary)。

但是,每次调试程序时,我都会看到该数组是[LazyMapCollection&lt; [String:Int],String&gt;]。

我尝试使用不同的数组并且它可以工作:

let dictionary = var regions:Dictionary<String,Int> = [...]  //my static dictionary
var values = Array(dictionary.values) //that works 
var keys = Array(dictionary.keys) //that works

这是否意味着可选类型和动态数据中唯一的问题?我不知道,请帮帮我们,伙计们,

1 个答案:

答案 0 :(得分:4)

只需删除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

您应该调用的是(_: SequenceType)初始值设定项,因为LazyMapCollection<[String : Int], String>符合该协议。

您的代码的其他一些提示:

  • 如果变量的值不会发生变化,请使用let声明,而不是var

  • 您可以简化:

-

if (customerViewModel.customer._dynamicMonthCount != nil) {
    var array = customerViewModel.customer._dynamicMonthCount
    var months_keys = Array(array!.keys)
}

到此:

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