我有一个循环遍历包含字符串或字典的数组并为类型为 [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。
最佳答案
普遍的问题是“转换表达式”不会产生“左值”,因此无法分配给它。例如,考虑以下代码的简化版本:
var x = "initial"
var y : AnyObject? = x
(y as? String) = "change"
你会在最后一行得到一个错误,因为你不能赋值给一个“cast expression”。
关于ios - 字符串不可转换为 DictionaryIndex<String, AnyObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29080713/