我有一个循环遍历包含字符串或字典的数组的函数,并使用原始数组中的值作为键,为类型为[String:AnyObject]
的新字典设置值。 sections
是一组自定义Section
个对象,其方法getValue
始终返回String
。
func getSectionVariables() -> [String:AnyObject] {
var variables = [String:AnyObject]()
for section in sections {
if let name = section.name as? String {
variables[name] = section.getValue()
} else if let name = section.name as? [String:String] {
for (k, v) in name {
if variables[k] == nil {
variables[k] = [String:String]()
}
if var dict = variables[k] as? [String:String] {
dict[v] = section.getValue() //This works, but of course copies variables by value and doesn't set variables[k]
}
(variables[k] as? [String:String])![v] = section.getValue() //Can't get this line to compile
}
}
}
return variables
}
如果我尝试将variables[k]
转换为[String:String]
,编译器会坚持String is not convertible to DictionaryIndex<String, AnyObject>
。我不确定为什么向下转换不起作用以及为什么编译器认为我正在尝试使用备用字典下标语法。
请注意,此项目位于Swift 1.1中。
答案 0 :(得分:1)
一般问题是&#34;演员表达&#34;不会产生&#34; l-值&#34;因此无法分配。例如,请考虑以下代码的简化版本:
var x = "initial"
var y : AnyObject? = x
(y as? String) = "change"
您将在最后一行收到错误,因为您无法指定&#34;强制转换表达式&#34;。