地图减少呼叫模糊

时间:2018-02-03 04:26:15

标签: swift reduce

我有以下代码:

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

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

  

如果没有更多的上下文,表达的类型是不明确的

我不确定为什么此代码含糊不清,因为$0.valuetotalValue都是CGFloat

其他相关代码:

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

为什么这个电话被认为是含糊不清的,我该如何解决?

1 个答案:

答案 0 :(得分:0)

我明白了。问题是我没有正确使用reduce功能。

reduce方法定义为:

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

我不是在nextPartialResult参数中组合结果和元素参数的属性。由于initialResult0.0,而我只是使用result部分($0)进行缩减,因此Xcode无法推断出我想要减少的类型。< / p>

将代码更改为此修复了问题:

let totalValue: CGFloat = totalValue ?? newSlices.map({ $0.value }).reduce(0.0, { $0 + $1 })

由于$1CGFloat,因此Xcode可以推断结果也是CGFloat