[英]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.