将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语法仍有一些问题。
答案 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}}条款。