为什么减少不适用于Struct?

qwe*_*_so 2 reduce struct swift

我有以下代码

struct Tab {
  var origin:CGFloat
  var width:CGFloat
  init(width:CGFloat) {
    origin = 0
    self.width = width
  }
}

let subTabs = [Tab(width:1), Tab(width:2)]
let w =  reduce(subTabs, CGFloat(0), { $0.width + $1.width })
Run Code Online (Sandbox Code Playgroud)

并期望在我的结构中reduce总结widths.但它会引发编译错误(您可以在Playground中测试).

Jua*_*uan 7

减少需求的函数需要2个参数:累计值和序列中的下一个项.您的函数需要两个序列项(Tab结构).由于您返回一个浮点数,因此累积的值是浮点数,而不是Tab您所期望的值.正确的电话是:

let w =  reduce(subTabs, CGFloat(0), { $0 + $1.width })
Run Code Online (Sandbox Code Playgroud)