議定書不符合自己的要求?為什么這個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為協議類型的數組,但這是不合理的事情嗎?我認為協議正是為了幫助提供類似層次結構的結構?
3 回答

繁星coding
TA貢獻1797條經驗 獲得超4個贊
如果您將CollectionType
協議擴展而不是Array
協議約束作為具體類型,則可以按如下方式重寫以前的代碼。
protocol P { }struct S: P { }let arr:[P] = [ S() ]extension CollectionType where Generator.Element == P { func test<T>() -> [T] { return [] }}let result : [S] = arr.test()
- 3 回答
- 0 關注
- 796 瀏覽
添加回答
舉報
0/150
提交
取消