Dictionary(grouping: , by: ) - 作为变量传递的谓词闭包
Dictionary(grouping: , by: ) - predicate closure passed as a variable
我有兴趣使用 Dictionary(grouping: , by: )
initializer。
但是,我必须根据情况根据不同的键对项目进行分组。我如何有条件地 select 密钥,然后将其作为变量传递给 by:
参数?
let predicate: ((MyObjectType) -> Int?)
if shouldUseValue1 {
predicate = {[=10=].value1?.intValue}
} else {
predicate = {[=10=].value2?.intValue}
}
var grouped = Dictionary(grouping: arrayToGroup, by: predicate)
我得到的错误是:
Cannot convert value of type '(MyObjectType) -> Int?' to expected argument type '(_) -> _'
所以,问题是我应该将什么类型传递给初始化程序的 by:
参数才能使其工作?
我刚刚在 Playground 上玩这个,想出了这个工作代码:
let array: [String] = ["Ho", "Hi", "Hello", "Hola", "Bonjour"]
let pred: (String) -> String.Element?
if true {
pred = { [=10=].first }
} else {
pred = { [=10=].last }
}
var grouped = Dictionary(grouping: array, by: pred)
print(grouped)
因此 by 参数需要数组 .Element 中相同类型的值。例如String.Element.
你也可以这样做:
let array: [String] = ["Ho", "Hi", "Hello", "Hola", "Bonjour"]
let pred: (String) -> String.Element? = { true ? [=11=].first : [=11=].last }
var grouped = Dictionary(grouping: array, by: pred)
print(grouped)
注意:陈述显而易见,但我使用的是 true 而不是真实条件。
我有兴趣使用 Dictionary(grouping: , by: )
initializer。
但是,我必须根据情况根据不同的键对项目进行分组。我如何有条件地 select 密钥,然后将其作为变量传递给 by:
参数?
let predicate: ((MyObjectType) -> Int?)
if shouldUseValue1 {
predicate = {[=10=].value1?.intValue}
} else {
predicate = {[=10=].value2?.intValue}
}
var grouped = Dictionary(grouping: arrayToGroup, by: predicate)
我得到的错误是:
Cannot convert value of type '(MyObjectType) -> Int?' to expected argument type '(_) -> _'
所以,问题是我应该将什么类型传递给初始化程序的 by:
参数才能使其工作?
我刚刚在 Playground 上玩这个,想出了这个工作代码:
let array: [String] = ["Ho", "Hi", "Hello", "Hola", "Bonjour"]
let pred: (String) -> String.Element?
if true {
pred = { [=10=].first }
} else {
pred = { [=10=].last }
}
var grouped = Dictionary(grouping: array, by: pred)
print(grouped)
因此 by 参数需要数组 .Element 中相同类型的值。例如String.Element.
你也可以这样做:
let array: [String] = ["Ho", "Hi", "Hello", "Hola", "Bonjour"]
let pred: (String) -> String.Element? = { true ? [=11=].first : [=11=].last }
var grouped = Dictionary(grouping: array, by: pred)
print(grouped)
注意:陈述显而易见,但我使用的是 true 而不是真实条件。