我有以下代码:
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.value
和totalValue
都是CGFloat
。
其他相关代码:
public struct HAPieChartSlice {
public let value: CGFloat
public let color: UIColor
}
为什么这个电话被认为是含糊不清的,我该如何解决?
答案 0 :(得分:0)
我明白了。问题是我没有正确使用reduce
功能。
reduce
方法定义为:
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
我不是在nextPartialResult
参数中组合结果和元素参数的属性。由于initialResult
为0.0
,而我只是使用result
部分($0
)进行缩减,因此Xcode无法推断出我想要减少的类型。< / p>
将代码更改为此修复了问题:
let totalValue: CGFloat = totalValue ?? newSlices.map({ $0.value }).reduce(0.0, { $0 + $1 })
由于$1
是CGFloat
,因此Xcode可以推断结果也是CGFloat
。