首页 > 解决方案 > 是否可以从 String 继承自定义类?

问题描述

我想将我的自定义类用作字符串。斯威夫特有可能吗?例如,我想做这样的事情:

label.text = CustomClass()

标签: swiftoop

解决方案


String在 Swift 中无法继承。它是一个struct,它们不支持继承。

您展示的用例的一种可能性是扩展UILabel* 以包装和解包您的类型,因为它可以将自己转换为字符串和从字符串转换。换句话说,如果你的班级有这些能力:

class CustomClass {
    var stringValue: String {
        // Create a string somehow
    }

    init(stringValue: String) {
        // Configure
    }
}

然后(或其他)上的辅助属性UILabel可以为客户隐藏这些操作:

extension UILabel {
    var myText: CustomClass? {
        get { return self.text.flatMap(CustomClass.init(stringValue:) }
        set { self.text = newValue?.stringValue }
    }
}

这样你就可以写了label.myText = instanceOfCustomClass

如果有必要——即,你发现自己需要对几种类型执行此操作——你甚至可以将“转换到/从字符串”提取到协议,而不是依赖于特定的具体类型。


*我在这里假设iOS;但是,相同的原则适用于任何具有 的事物var text: String? { get set }


推荐阅读