Type(key:String,value:Any)没有下标成员

时间:2017-08-31 13:49:29

标签: swift dictionary

我知道之前已经问过这个问题,我理解其中一些问题和解决方案中给出的解释。事实上,我找到的解决方案就是我在搜索SO之前所做的事情。但我仍然收到错误。我有一个字典,我设置如下:

var dictBarData = [String: Any]()

然后我就这样填充它:

let vThisBar = UIView()

//set initial coordinates for view
var barX = 0.0
let barY = Double(vBarChart.frame.size.height - 40.0)
let barW = 60.0
var barH = 10.0

barX = getBarX(barIndex)

vThisBar.frame = CGRect(x:barX, y:barY, width:barW, height:barH)
vThisBar.backgroundColor = UIColor.blue
vBarChart.addSubview(vThisBar);

var dictThisBar = [String: Any]()
dictThisBar["category"] = category
dictThisBar["value"] = value
dictThisBar["view"] = vThisBar
dictBarData[String(barIndex)] = dictThisBar

然后我尝试像这样访问这些词典:

for dictThisBar in dictBarData as Dictionary {
    print(dictThisBar["view"] as! UIView)
}

此时我收到了错误(在打印件上)。我正在从Objective-c过渡到Swift(我可能更喜欢Objective-C:D),所以我认为我错过了一步。

2 个答案:

答案 0 :(得分:1)

您正在使用数组枚举语法词典,您需要这个

for (key, value) in dictBarData {
    print(key, value)
}

for (key, value) in dictBarData {
    if key == "view" { print(value as! UIView) }
}

或者如果您只想获得一个值,请忘记循环:

print(dictThisBar["view"] as! UIView)

由于dictBarData被声明为[String: Any],因此不需要任何类型转换。

答案 1 :(得分:1)

要扩展@vadian,如果您仍想使用数组枚举,您仍然可以访问字典组件,如下所示

for dictThisBar in dictBarData as Dictionary 
{
    print(dictThisBar.key)
    print(dictThisBar.value)
}