0

我想知道如何做以下事情:-

    // This is not correct
    func += (inout lhs: Int, rhs: Int) -> Int {
        return lhs + rhs
    }


Objective Usage:- scrollTo(pageIndex: pageIndex += 1)

4

2 回答 2

4

您的代码很接近,但它需要做两件事:

  1. 将右侧添加到左侧
  2. 返回新值。

您的代码仅返回新值,不会更新左侧值。理论上,你可以使用这个:

func += (lhs: inout Int, rhs: Int) -> Int {
    lhs = lhs + rhs
    return lhs
}

但是还有另一个问题;标准的 += 运算符具有void返回类型,并且您已经定义了具有Int返回类型的新运算符。

如果您尝试+=在可以接受 void 返回类型的上下文中使用该运算符(这是此运算符的正常使用),编译器将给出歧义错误,因为它无法确定应该使用哪个函数:

someIndex += 1   // This will give an ambiguity compile time error

您可以通过使用泛型定义运算符来解决此问题,其中参数符合AdditiveArithmetic(感谢@NewDev 提供此提示):

func +=<T: AdditiveArithmetic> (lhs: inout T, rhs: T) -> T {
    lhs = lhs + rhs
    return lhs
}

但是,我必须说,当您只需两行代码时,这似乎确实增加了很多复杂性;一个递增pageIndex,然后调用该函数。

于 2020-10-12T22:01:11.313 回答
0

我不确定我是否理解你,但如果我理解了,我会是这样的

func nextPage(n1: Int) -> Int {

var number = n1 + 1 返回数字 }

于 2020-10-12T21:47:42.417 回答