繁体   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