我知道之前已经问过这个问题,我理解其中一些问题和解决方案中给出的解释。事实上,我找到的解决方案就是我在搜索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),所以我认为我错过了一步。
答案 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)
}