无法使用“Any?”类型的索引为“[AnyHashable:Any]”类型的值下标
Posted
技术标签:
【中文标题】无法使用“Any?”类型的索引为“[AnyHashable:Any]”类型的值下标【英文标题】:Cannot subscript a value of type '[AnyHashable : Any]' with an index of type 'Any?' 【发布时间】:2019-03-08 16:09:28 【问题描述】:我正在尝试将目标 c 函数转换为 swift 函数。
+(NSString *)extractNameWithDictionary:(NSDictionary *)dictionary
NSDictionary *assets = dictionary[@"assets"];
NSDictionary *item = dictionary[@"item"];
NSArray *facilityAssets = item[@"assets"];
NSDictionary *facilities = facilityAssets[0];
NSDictionary *asset = assets[facilities[@"content"]];
return asset[scs_name] ? : @"";
到
func extractNameWithDictionary(dictionary: [AnyHashable : Any]) -> String
guard let assets = dictionary["assets"] as? [AnyHashable : Any],
let item = dictionary["item"] as? [AnyHashable : Any],
let facilityAssets = item["assets"] as? [Any],
let facilities = facilityAssets[0] as? [AnyHashable : Any],
let asset = assets[facilities["content"]] else return ""
return asset[scs_name] ?? ""
但在最后一个常量中:let asset = assets[facilities["content"]] 我得到:
无法使用“Any?”类型的索引为“[AnyHashable : Any]”类型的值下标
有什么帮助吗?
【问题讨论】:
scs_name
is not here 我想它的类型是String
【参考方案1】:
你可以试试
func extractNameWithDictionary(dictionary: [String : Any]) -> String
guard let assets = dictionary["assets"] as? [String : Any],
let item = dictionary["item"] as? [String : Any],
let facilityAssets = item["assets"] as? [Any],
let facilities = facilityAssets[0] as? [String : Any],
let asset = assets[facilities["content"] as? String ?? "" ] as? [String:Any] else return ""
return asset[scs_name] as? String ?? ""
这个
facilities["content"]
返回您不能在名为 assets
的字典中使用的 Any
,因为它的键类型为 AnyHashable
【讨论】:
【参考方案2】:最简单的方法是继续您的卸载系统以包含内容步骤:
...
let facilities = facilityAssets[0] as? [AnyHashable : Any],
let content = facilities["content"] as? String,
let asset = assets[content] as? [AnyHashable: String]
else return ""
您可能会从那里继续输入一些内容:
func extractNameWithDictionary(dictionary: [String : Any]) -> String
guard let assets = dictionary["assets"] as? [String : Any],
let item = dictionary["item"] as? [String : Any],
let facilityAssets = item["assets"] as? [[String : Any]],
let content = facilityAssets.first?["content"] as? String,
let asset = assets[content] as? [String: String],
let name = asset[scs_name]
else return ""
return name
但是,随着您在此项目上的工作越来越多,您将希望完全摆脱 NSDictionary
,并将其替换为具有类型属性的适当结构/类,而不必执行所有这些 @987654324 @疯狂。这只是因为使用了字典而不是结构或类而出现。
【讨论】:
以上是关于无法使用“Any?”类型的索引为“[AnyHashable:Any]”类型的值下标的主要内容,如果未能解决你的问题,请参考以下文章
错误:无法使用“UIImagePickerController.InfoKey”类型的索引为“[String:Any]”类型的值下标 [重复]
无法使用“UIImagePickerController.InfoKey”类型的参数为“[String : Any]”类型的值下标
无法将类型“x”的值转换为预期的参数类型“[String:Any]”
无法强制将“GraphRequestResult<GraphRequest>”类型的值转换为“[Any]”类型
TypeScript Err:“元素隐式具有‘any’类型,因为‘any’类型的表达式不能用于索引类型
类型 'IResolvers<any, any>' 不可分配给类型 'GraphQLResolverMap<any>'。索引签名不兼容