我正在尝试将目标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] ?? ""
}
但在最后一个常数:让资产=资产[设施[“内容”]]我得到:
不能使用“Any”类型的索引下标“[AnyHashable:Any]”类型的值
对此有何帮助?
你可以试试
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"]
返回Any
,你不能在名为assets
的字典中使用,因为它的关键是AnyHashable
类型
最简单的方法是继续卸载系统以包含内容步骤:
...
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
,并用一个具有类型属性的正确结构/类替换它,而不是必须做所有这些as?
疯狂。这只是因为使用字典而不是结构或类而出现。