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
这是否意味着可选类型和动态数据中唯一的问题?我不知道,请帮帮我们,伙计们,
答案 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)
}