2017-08-31 62 views
0

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

回答

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],因此不需要任何类型转换。

+0

谢谢,转型的最困难的部分是在我的头上,我仍然在思考Objective-C。 :D – PruitIgoe

1

要延长@vadian,你应该还是要使用数组枚举,您仍然可以访问字典组件如下图所示

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

谢谢,我给了vadian胜利,但你得到了一个碰撞。 :) – PruitIgoe

相关问题