На самом деле нет, MutableCollection.swapAt не определен, чтобы принимать два Int
, он определяется в терминах Index
из MutableCollection
:
swapAt(Self.Index, Self.Index)
ПоэтомуВы не можете просто использовать Int
, если не добавите ограничение
Index == Int
к своей декларации, сделав его:
extension MutableCollection where Self: BidirectionalCollection, Element: Equatable, Index == Int {
mutating func moveRight(_ value: Element){
for i in (0..<self.count) {
if (self[self.index(self.startIndex, offsetBy: i)] == value){
swapAt(0, 5)
}
}
}
}
Если вы не хотите ограничивать себя целочисленными индексами, выследует начинать с замены итерации с 0 ..< count
на итерацию по индексам:
for i in indices {
if (self[i] == value) {
// do swap
...
}
}