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