我想知道如何做以下事情:-
// This is not correct
func += (inout lhs: Int, rhs: Int) -> Int {
return lhs + rhs
}
Objective Usage:- scrollTo(pageIndex: pageIndex += 1)
我想知道如何做以下事情:-
// This is not correct
func += (inout lhs: Int, rhs: Int) -> Int {
return lhs + rhs
}
Objective Usage:- scrollTo(pageIndex: pageIndex += 1)
您的代码很接近,但它需要做两件事:
您的代码仅返回新值,不会更新左侧值。理论上,你可以使用这个:
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
,然后调用该函数。
我不确定我是否理解你,但如果我理解了,我会是这样的
func nextPage(n1: Int) -> Int {
var number = n1 + 1 返回数字 }