Почему этот компилятор Swift не компилируется?
protocol P { }
struct S: P { }
let arr:[P] = [ S() ]
extension Array where Element : P {
func test<T>() -> [T] {
return []
}
}
let result : [S] = arr.test()
Компилятор говорит: "Тип P
не соответствует протоколу P
" (или, в более поздних версиях Swift, "Использование" P "в качестве конкретного типа, соответствующего протоколу" P ", не поддерживается".).
Почему бы и нет? Это как-то похоже на дыру в языке. Я понимаю, что проблема связана с объявлением массива arr
как массива типа протокола, но разве это необоснованная вещь? Я думал, что протоколы должны были точно помочь структурировать что-то вроде иерархии типов?