Map reduce 调用不明确

Map reduce call ambiguous

我有以下代码:

func update(withSlices newSlices: [HAPieChartSlice], totalValue: CGFloat? = nil, animation: HAPieChartAnimation = .none, animationDuration: TimeInterval = 0.0) {
    let totalValue: CGFloat = totalValue ?? newSlices.map({ [=10=].value }).reduce(0.0, { [=10=] }) //Type of expression is ambiguous without more context

我在上面代码中的 reduce 函数上遇到编译错误。错误是

Type of expression is ambiguous without more context

我不确定为什么这段代码不明确,因为 [=13=].valuetotalValue 都是 CGFloat

其他相关代码:

public struct HAPieChartSlice {
    public let value: CGFloat
    public let color: UIColor
}

为什么这个调用被认为是不明确的,我该如何解决它?

我明白了。问题是我没有正确使用 reduce 函数。

reduce方法定义为:

func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result

而且我没有 属性 在 nextPartialResult 参数中组合结果和元素参数。由于 initialResult0.0 并且我只是使用 result 部分进行缩减 ([=18=]),因此 Xcode 无法推断出我正在尝试的类型减少到。

将代码更改为此解决了问题:

let totalValue: CGFloat = totalValue ?? newSlices.map({ [=11=].value }).reduce(0.0, { [=11=] +  })

由于 </code> 是 <code>CGFloat,Xcode 可以推断结果也是 CGFloat