转换错误:类型“任何”没有下标成员

时间:2017-03-15 16:51:33

标签: swift swift3

将for循环转换为Swift 3后,我收到错误“Type'Any'没有下标成员”

for inputKey in inputKeys where attributes[inputKey]?[kCIAttributeClass] == "NSNumber"
                                .....................^
{

}

我希望添加类似

的内容
for inputKey in inputKeys where attributes[inputKey]as?[String:Any][kCIAttributeClass] == "NSNumber"

但这不起作用:-( Swift语法仍有一些问题。

1 个答案:

答案 0 :(得分:2)

您希望attributes实际上是[String: [String: String]] - 字典词典。

或者,您可以将attributes[inputKey]投射到[String:String]

我认为这样可行:

for inputKey in inputKeys where (attributes[inputKey] as? [String:String])?[kCIAttributeClass] == "NSNumber"

根据评论进行修改:

由于attributes实际上并不保证[String: [String: String]],只有[String: [String: Any]](甚至可能不是{}},因此您需要额外as?强制转换为guard安全。

如果在一行上有很多演员表,我认为最好将测试放在for正文开头的where语句中,而不是让{{1}}这么大的{{1}}条款。