我编写了一个自定义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
,两个版本都会正确地返回值,但是如果没有设置该值,则它们返回的默认值是不同的。
例如,我从BaseTableViewCell
类派生了UserNameTableViewCell
子类,然后不自己设置accessibilityLabel
:
以UserNameTableViewCell.的形式返回
accessibilityLabel
accessibilityLabel
,因为它返回"(BaseTableViewCell) -> () -> 为什么?!
发布于 2018-06-13 04:29:58
在第二个版本的代码中调用self
时,它并没有初始化,这就是为什么它会显示超类的名称。
如果将变量设置为lazy
,则不会从头开始设置它,而是在执行myInstance.accesibilityLabel,
时正确设置,从而确保类名已经可用,因为self
已经初始化。
https://stackoverflow.com/questions/50823605
复制相似问题