我有一个自定义类型Banana
,我想创建协议的扩展Array
(或者,如果必须的话Sequence
),Banana
以符合协议,CustomStringConvertible
以便description
在数组上进行调用Banana
将返回“一堆香蕉”。这可能吗?如果可以,我将如何去做呢?
简短的回答:不。
您可以限制扩展,但是受限制的扩展不能包含继承子句(上面链接的Swift提案@Code Different正是您想要的)。
一种解决方法是制作受限制的扩展名,但只添加您自己的属性,而不是使其符合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]"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句