我想定義一個新的運算符並將數組[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