我一直在努力實現一個Swift數組的擴展以按值刪除元素。有人提出使用向下澆注的解決方案,我試圖避免由於與動態類型檢查相關的成本。你能指出如何獲得下面的代碼來編譯。Swift Array擴展刪除元素的值沒有轉換
感謝,
protocol Removable: SequenceType {
typealias Element
mutating func remove(v: Element) -> Bool
}
func removeElementByValue<T: Equatable>(inout array: [T], valueToRemove: T) -> Bool {
for (index, value) in enumerate(array) {
if value == valueToRemove {
array.removeAtIndex(index)
return true
}
}
return false
}
extension Array: Removable {
mutating func remove(v: T) -> Bool {
return removeElementByValue(&self, v) // compile error here
}
// tried also with:
// mutating func remove<E:Equatable where E == T>(v: T) -> Bool
}
感謝@milos您的迴應。我真正希望達到的目的是爲了編譯。我可以在擴展中移動全局函數,在平等檢查時應用投射,並且可以工作。這裏是關心的問題,假定協議和函數在給定的情況下如何獲得以上編譯。因此,我的結論是,除了我缺乏協調跨協議的知識之外,泛型和擴展可能是語言需要更多地指定where子句。 – Atila 2014-10-04 18:51:40