這個一直在竊聽我一段時間。我不確定我是否錯過了一些東西,但是不應該這樣做?iOS Swift:將泛型數組轉換爲子類數組
protocol IDIdentifiable { }
class A : IDIdentifiable {
let id : Int
init(id: Int) { self.id = id }
}
class B : IDIdentifiable {
let id : Int
init(id: Int) { self.id = id }
}
func findObjectById<T: IDIdentifiable>(objects: [T], id: Int) -> T {
if let casted = objects as? [A] {
return casted.filter{ $0.id == id }[0]
}
}
將對象參數強制轉換爲A對象數組時出錯。錯誤說'A' is not a subtype of 'T'
,顯然不是這種情況。
這真的很煩人,因爲我想有一個通用的方法可以同樣的方式處理多個類的對象數組。我首先嚐試使用switch-statements創建一個額外的協議,如IDIdentifiable,但是這些方法都沒有奏效。
我很高興爲您提供任何建議!
這和我這裏的問題不一樣嗎? http://stackoverflow.com/questions/33112559/protocol-doesnt-conform-to-itself – matt
停止說「沒有工作」。這沒有意義。你已經通過解釋這個問題是一個編譯錯誤來解決了這個問題。那就是我所追求的。 – matt
確實非常相似。儘管如此。 – Yeehaw