我一直在仿製藥和擴展玩弄於現有各類在斯威夫特3.我寫了兩個通用陣列功能與擴展陣列查找和替換方法,分別是()取代和替換( )。 replace()函數按預期工作,但replace()函數有編譯時錯誤。以下是代碼和其中一種方法的測試。通用擴展陣列不工作
extension Array {
func replaced<T: Equatable>(each valueToReplace: T, with newValue: T) -> [T] {
var newArray:[T] = []
for index:Int in 0..<self.count {
if let temp = self[index] as? T, temp == valueToReplace{
newArray.append(newValue)
}else{
newArray.append(self[index] as! T)
}
}
return newArray
}
mutating func replace<T: Equatable>(each valueToReplace: T, with newValue: T) {
for index:Int in 0..<self.count {
if let temp = self[index] as? T, temp == valueToReplace {
// FIXME: self[index] = newValue
}
}
return
}
}
var j = [1,2,3,4,3,6,3,8,9]
var newArray = j.replaced(each: 3, with: 0)
我上第二方法的編譯時間錯誤,更換()中,在以「// FIXME:」註釋的註解行。編譯時錯誤說:「模糊引用成員'下標'」。
如何修復替換()代碼,所以它的工作原理?
非常類似的問題,以http://stackoverflow.com/q/41045212/2976878 - 您正在定義新的本地通用佔位符「T」,而不是使用「Array」的「元素」類型。 – Hamish
只是讓在陣列擴展'擴展陣列的約束,其中元素:Equatable {' –
一旦你使用了'Element',你可以簡單的實現'replaced'顯著爲'返回地圖{$ 0 == valueToReplace? NEWVALUE:$ 0}'順便說一句:) – Hamish