簡體   English   中英

如何創建擴展以允許自定義類型的數組符合協議?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM