我写了一个自定义的TableViewCell类,它返回在其上设置的accessibilityLabel
,或者只返回它的类名accessibilityLabel
。虽然下面两个实现中的一个不能按预期工作。我想知道为什么......
返回正确 className
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
作为返回“(BaseTableViewCell) - >() - > BaseTableViewCell” 为什么?!
答案 0 :(得分:1)
self
未初始化,这就是它显示超类名称的原因。
如果将该变量设置为lazy
,则不会从头开始设置,但会在执行myInstance.accesibilityLabel,
时设置,从而确保类的名称已经可用,因为{ {1}}本来是初始化的。