swift - 是否可以从 String 继承自定义类?
问题描述
我想将我的自定义类用作字符串。斯威夫特有可能吗?例如,我想做这样的事情:
label.text = CustomClass()
解决方案
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 }
。
推荐阅读
- android - 声纳 Android 错误的 Gradle 插件“属性名称具有无效字符 '$'”
- html - Django网页在应该注销时显示登录
- c# - 检查文本是否是 C# 中的 C# 代码
- ruby-on-rails-3 - 从以前通过域 xyz.com 上传的 s3 存储桶获取图像现在我想通过 abc.com 域获取图像怎么可能
- javascript - NodeJS异步/等待命令不起作用
- c# - C# 将 j 解码为 <
- javascript - 从确认框中单击确认或取消按钮后,如何使用 JavaScript 或 jQuery 返回真值或假值?
- c# - 有没有办法在运行时将 Browserstack 应用程序自动化的测试标记为失败?
- ios - 在 iOS 中处理字体格式
- dart - 包含固定列表视图的列表视图