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=].value
和 totalValue
都是 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
参数中组合结果和元素参数。由于 initialResult
是 0.0
并且我只是使用 result
部分进行缩减 ([=18=]
),因此 Xcode 无法推断出我正在尝试的类型减少到。
将代码更改为此解决了问题:
let totalValue: CGFloat = totalValue ?? newSlices.map({ [=11=].value }).reduce(0.0, { [=11=] + })
由于 </code> 是 <code>CGFloat
,Xcode 可以推断结果也是 CGFloat
。
我有以下代码:
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=].value
和 totalValue
都是 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
参数中组合结果和元素参数。由于 initialResult
是 0.0
并且我只是使用 result
部分进行缩减 ([=18=]
),因此 Xcode 无法推断出我正在尝试的类型减少到。
将代码更改为此解决了问题:
let totalValue: CGFloat = totalValue ?? newSlices.map({ [=11=].value }).reduce(0.0, { [=11=] + })
由于 </code> 是 <code>CGFloat
,Xcode 可以推断结果也是 CGFloat
。