簡體   English   中英

在Swift中,如何制作String的后代? 嘗試執行此操作時出現錯誤“從非協議,非類類型'String'繼承”

[英]In Swift, how to make a descendant of String? I get error “Inheritance from non-protocol, non-class type 'String'” when trying to do that

我想讓一個函數返回一個可以添加新函數的類型,但仍然可以將其通常識別為String (仍然具有String的所有方法,並且仍然可以由接收String任何參數接收)。

但是,當我嘗試從String派生一個類時,出現此錯誤:

從非協議,非類類型'String'繼承

當然,我可以改用擴展來擴展現有的String來添加該函數,但是我認為這將使用不必要和不相關的函數污染String以便常規使用。

例如,我要添加的功能可能是這樣的:

class ImageUrl : String {

    func getImage (callback: ((UIImage?)->Void)) { ... }

}

或像這樣:

class Base64 : String {

    var image : UIImage { ... }
    var data : Data { ... }
    var string : String { ... }

}

如果我將這些函數擴展到主要的String類型,那將會造成混亂。

如何在Swift中執行此操作? 或對此有任何解決方法? 謝謝。

您不能從Swift中的String繼承,因為它是struct 您只能使用提到的extension來添加功能,但這不能讓您使用存儲的屬性(允許使用問題中所寫的計算屬性)。

但是,滿足您需求的更好方法是使用組合:

class Base64 {

    let str: String

    required init(value: String) {
        self.str = value
    }
}

您可以在此處添加所需的功能。

您可以使用fileprivate修飾符創建一個String擴展名,以避免污染全局名稱空間。 這些功能將僅可用於在源文件中進行編碼,而不能用於全局名稱空間。

fileprivate extension String {
  var image : UIImage { ... }
  var data : Data { ... }
  var string : String { ... }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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