我想将自定义类用作字符串。在Swift中有可能吗?例如,我想做这样的事情:
label.text = CustomClass()
答案 0 :(得分:1)
在Swift中无法从String
继承。它是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 }
的任何事物。