我想定义一个新的运算符并将数组[Int]
的每个元素乘以Int
,例如[3, 2, 10] * 10
。是否可以在Swift中使用自定义运算符来定义[Int] * Int?
然而,因为Int
既不协议也不类(它的结构),我首先定义以下:
protocol Numeric {}
extension Int: Numeric {}
extension Double: Numeric {}
extension Float: Numeric {}
然后,我试图限定操作者,如:
func *<T: Numeric> (left: [T], right: T) -> [T] {
var newArray: [T] = []
for i in left {
newArray.append(i * right)
}
return newArray
}
然而,这会产生一个错误:Cannot convert value of type 'T' to expected argument type '[_]'
。
我不知道是什么类型[_]
手段,我不指望,但我想这个问题来自于我没有运营商定义的需要T
和T
,这两者都是在这种情况下为Numeric
。
所以我定义了另一家运营商,如:
func *<T: Numeric> (left: T, right: T) -> T {
return left * right
}
然而,虽然这已经没有问题汇编,用了很多很多的static * infix <A where ...> (A, A) -> A
发生的运行时错误。
我不知道为什么,这是运营商执行了这么多次,但现在我不知道是否有可能首先定义一个自定义*
运营商,虽然Int
确实已经有*
运营商定义。
那么还有可能在Swift中定义[Int] * Int
运算符?
实施OOOOH它的超级真棒。那么我首先试图用map来定义它,但是当我打开墙时,我更简单地确定问题不是来自'map'。非常感谢。 – Blaszard