![](/img/trans.png)
[英]Type 'String' does not conform to protocol 'NSCopying' - Array swift json Error
[英]How do I create an extension to allow an array of a custom type to conform to a protocol?
我有一个自定义类型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]"
您可以在香蕉类printDescription中创建一个自定义方法,该方法将打印所需的描述。 在这种情况下,无需创建扩展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.