Swift - 如何为 Int 重载 += 以在像 nextPage(page: pageIndex += 1) 这样的函数调用中将运算符作为参数传递?

Swift - How to overload += for Int to pass the operator as a parameter in a function call like nextPage(page: pageIndex += 1)?

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

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


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

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

func nextPage(n1: Int) -> Int {

变量数 = n1 + 1 return 个 }

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

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

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

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

但是还有一个问题;标准 += 运算符具有 void return 类型,您定义了一个具有 Int return 类型的新运算符。

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

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 然后调用函数。