2017-08-31 65 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

相關問題