swift - 获取错误的默认值
问题描述
我写了一个自定义的 TableViewCell 类,它要么返回accessibilityLabel
设置在它上面的,要么只返回它的类名作为accessibilityLabel
. 尽管以下两种实现之一不能按预期工作。我试图理解为什么...
返回正确的类名
class BaseTableViewCell: UITableViewCell {
var _acsLabel: String?
override var accessibilityLabel: String?{
get{
return _acsLabel ?? "\(type(of: self))"
}set (newValue) {
_acsLabel = newValue ?? ""
}
}
}
返回错误的类名
class BaseTableViewCell: UITableViewCell {
var _acsLabel: String? = "\(type(of: self))"
override var accessibilityLabel: String?{
get{
return _acsLabel
}set (newValue) {
_acsLabel = newValue ?? ""
}
}
}
如果我设置了 ,两个版本都会正确返回值accessibilityLabel
,但是如果未设置值,则它们返回的默认值是不同的。
例如,我UserNameTableViewCell
从我的BaseTableViewCell
班级中继承,然后不设置accessibilityLabel
自己:
- 正确的版本返回
accessibilityLabel
为UserNameTableViewCell。 - 不正确的版本返回
accessibilityLabel
as 返回"(BaseTableViewCell) -> () -> BaseTableViewCell"
这是为什么?!
解决方案
self
在第二版代码中调用它时没有初始化,这就是它显示超类名称的原因。
如果您将该变量设置为lazy
,它将不会从一开始就设置,但会在您这样做时正确设置,myInstance.accesibilityLabel,
从而确保类的名称已经可用,因为它self
已经被初始化了。
推荐阅读
- visual-studio - 如何使用 NSIS 安装 Visual C++ Redist
- javascript - 如何将 Javascript 中的 blob 表单上传到 Django 后端
- php - 从 Laravel API 服务器接收的数据未显示在 Flutter 屏幕上
- python - 当 NaN 在组列中时,Pandas groupby 会应用奇怪的行为
- reactjs - BabylonJS 和 React - ReferenceError: earcut is not defined
- php - PHP 对象本身的属性是另一个类的另一个对象
- kubernetes - 指标服务器无法从 Windows 工作人员中提取指标
- android - Firebase addOnSuccessListener 回调运行上下文抛出`NetworkOnMainThreadException`
- html - HTML 验证:为什么将交互式元素放在交互式元素中是无效的?
- c++ - 类成员可见性 C++