无法将类型为"[(键:字符串,值:Int)]"的返回表达式转换为返回类型"[字符串:Int]"



我有一个自定义数据结构,如下所示:

struct Entitlements {
var entitlements: [Entitlement]
struct Entitlement {
var type: String
var entitlement: Int
}
}

我有一个初始化程序,它取了一个[String:Int]的字典,并将其映射到[Entignment]:

init(entitlements: [String: Int]) {
self.entitlements = entitlements.map({ (entitlement) -> Entitlement in
return Entitlement(type: entitlement.key, entitlement: entitlement.value)
})
}

我还有一个函数,它将[Entignment]映射到[String:Int]。我试着这样写:

func simplify() -> [String: Int] {
self.entitlements.map { (entitlement) -> (key: String, value: Int) in
return (key: entitlement.type, value: entitlement.entitlement)
}
}

但我得到了一个错误,看起来像这样:

'无法将类型为'[(key:String,value:Int(]'的返回表达式转换为返回类型'[String:Int]'

我曾尝试使用平面图将字典合并为一个字典,但没有成功:

func simplify() -> [String: Int] {
self.entitlements.flatMap { (entitlement) -> [String: Int] in
return [entitlement.type, entitlement.entitlement]
}
}

但我得到了一个错误:

"无法在当前上下文中推断闭包类型">

如有任何帮助,我们将不胜感激!

您可以使用Dictionary(uniqueKeysWithValues:(并将授权数组映射到元组数组,以获得init的正确输入格式。

func simplify() -> [String: Int] {
Dictionary(uniqueKeysWithValues: entitlements.map{ ($0.type, $0.entitlement) })
}

如果你需要处理重复的密钥,还有一种变体需要一个闭包来处理要做的事情

func toDictionary() -> [String: Int] {
Dictionary(entitlements.map { ($0.type, $0.entitlement) },
uniquingKeysWith: { (first, _) in first })
}

最新更新