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