Dictionary(grouping:,by:)-谓词闭包作为变量传递

我对使用Dictionary(grouping:,by: ) initializer感兴趣。 但是,根据情况,我必须根据不同的键对项目进行分组。如何有条件地选择键,然后将其作为变量传递给by:参数?

let predicate: ((myobjectType) -> Int?)
if shouldUseValue1 {
    predicate = {$0.value1?.intvalue}
} else {
    predicate = {$0.value2?.intvalue}
}

var grouped = Dictionary(grouping: arrayToGroup,by: predicate)

我得到的错误是:

Cannot convert value of type '(myobjectType) -> Int?' to expected argument type '(_) -> _'

所以,问题是我应该将哪种类型传递给初始化程序的by:参数以使其起作用?

fei2008e 回答:Dictionary(grouping:,by:)-谓词闭包作为变量传递

我刚刚在操场上玩了这个,并想出了这个工作代码:

let array: [String] = ["Ho","Hi","Hello","Hola","Bonjour"]
let pred: (String) -> String.Element?

if true {
    pred = { $0.first }
} else {
    pred = { $0.last }
}

var grouped = Dictionary(grouping: array,by: pred)
print(grouped)

因此,by参数期望数组.Element中具有相同类型的值。例如字符串元素。

您也可以做到:

let array: [String] = ["Ho","Bonjour"]
let pred: (String) -> String.Element? = { true ? $0.first : $0.last }

var grouped = Dictionary(grouping: array,by: pred)
print(grouped)

注意:说明明显,但我使用的是true而不是实际条件。

本文链接:https://www.f2er.com/3143525.html

大家都在问