我有一個自定義類型Banana
和我想創建的Array
的延伸部(或者,如果非要,Sequence
)的Banana
以符合協議CustomStringConvertible
使得Banana
陣列上調用description
將返回「一束香蕉「。這是可能的,如果是這樣,我會怎麼做呢?如何創建一個擴展,允許自定義類型的數組,以符合協議?
0
A
回答
1
簡短的回答:沒有。
您可以約束擴展,但受約束的擴展不能包含繼承子句(Swift proposal @代碼上面的不同鏈接正是您正在查找的內容)。
一種解決方法是使受約束的擴展,而只是添加自己的屬性,而不是它符合CustomStringConvertible
。
class Banana : CustomStringConvertible {
var description: String {
return "a banana"
}
}
let aBanana = Banana()
aBanana.description // "a banana"
extension Array where Element: Banana {
var bananaDescription: String {
return "a bunch of bananas"
}
}
let bananas = [Banana(), Banana(), Banana()]
bananas.bananaDescription // "a bunch of bananas"
值得注意的,那就是,Array
已經符合CustomStringConvertible
。
let bananas = [Banana(), Banana(), Banana()]
bananas.description // "[a banana, a banana, a banana]"
0
你可以在你的香蕉類,printDescription創建自定義的方法,該方法將打印您所需的說明。在這種情況下無需創建擴展名。
+0
我已經得到了單個香蕉(這不符合CustomStringConvertable和財產只是所謂的說明),但我想打印有關香蕉的集合,而不只是每個香蕉。 –
相關問題
- 1. 如果元素符合給定的協議,擴展數組以符合協議
- 2. Swift協議擴展中允許混合類/協議類型約束嗎?
- 3. protobuf(協議緩衝區)是否允許自定義類型?
- 4. 如何擴展HashMap以允許字符串,字符串類型
- 5. Swift中的協議擴展凡對象是一個類,並符合協議
- 6. 類型不符合一個未定義的協議
- 7. 協議擴展後定義的函數?
- 8. 協議以擴展
- 9. 符合一個協議協議相關聯的類型
- 10. 擴展符合NSFetchRequestResult的協議
- 11. 符合協議的Swift擴展
- 12. 如何創建一個計數符合某個協議的對象的類別?
- 13. 定義一個符合多個協議/協議+超類的變量
- 14. 如何創建自定義JUnit5擴展
- 15. 擴展UIButton只有當符合協議
- 16. 如何爲UIView子類創建自定義委託協議?
- 17. 自定義UITableViewCell不符合協議UITableViewDataSource?
- 18. 擴展數組元素符合協議在swift 2.0
- 19. 我可以聲明一個符合Swift協議的特定類的類型嗎?
- 20. 只允許某些類別的斯威夫特符合協議
- 21. 創建自定義協議(Windows 7)
- 22. 符合多種協議的Casting類型作爲單個協議
- 23. 協議擴展和子類
- 24. 如何創建一個動態擴展自己的數組?
- 25. 如何指定一個符合類的協議在夫特
- 26. 協議功能,可以採取如果我創建一個協議符合協議
- 27. 擴展一個類以符合接口?
- 28. 擴展符合協議的類與基於相似條件擴展協議的區別?
- 29. 聲明一個符合協議的泛型類型的常量
- 30. Swift:如何創建一個符合協議的子類返回類型的函數,其中的超類定義爲返回類型?
看起來像你必須要等到斯威夫特4.你所描述的一樣[這個提議](https://github.com/apple/swift-evolution/blob/master/proposals/0143-conditional-聲音conformances.md) –
相關:[?有沒有辦法覆蓋到數組中的字符串斯威夫特鑄造(http://stackoverflow.com/q/39046816/2976878) – Hamish
@CodeDifferent這看起來不錯,但我已經可以延長'序列'與一個元素類型像這樣'擴展序列,其中Iterator.Element ==香蕉{...}'。我只想讓結果順序符合'CustomStringConvertible'或者這是你提到的相同的提議? –