議定書不符合自己的要求?為什么這個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不符合協(xié)議P”(或者,在Swift的更高版本中,“不支持使用'P'作為符合協(xié)議'P'的具體類型?!保?。為什么不?不知怎的,這感覺就像語言中的漏洞。我意識到問題源于將數(shù)組聲明arr為協(xié)議類型的數(shù)組,但這是不合理的事情嗎?我認(rèn)為協(xié)議正是為了幫助提供類似層次結(jié)構(gòu)的結(jié)構(gòu)?
3 回答

繁星coding
TA貢獻(xiàn)1797條經(jīng)驗 獲得超4個贊
如果您將CollectionType
協(xié)議擴(kuò)展而不是Array
協(xié)議約束作為具體類型,則可以按如下方式重寫以前的代碼。
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 關(guān)注
- 802 瀏覽
添加回答
舉報
0/150
提交
取消