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 个
}
您的代码很接近,但它需要做两件事:
- 将右侧添加到左侧
- 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
然后调用函数。
我想知道如何做以下事情:-
// 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 个 }
您的代码很接近,但它需要做两件事:
- 将右侧添加到左侧
- 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
然后调用函数。