【发布时间】:2018-11-22 05:33:13
【问题描述】:
我编写了一个自定义 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,两个版本都会正确返回值,但是如果没有设置值,它们返回的默认值是不同的。
例如,我从BaseTableViewCell 类中继承UserNameTableViewCell,然后不要自己设置accessibilityLabel:
- 正确的版本将
accessibilityLabel返回为UserNameTableViewCell。 - 不正确的版本返回
accessibilityLabel作为返回 "(BaseTableViewCell) -> () -> BaseTableViewCell"
这是为什么?!
【问题讨论】:
-
你的类名和你显示的输出不匹配。这些是错别字吗?
-
这是一个错字。谢谢。固定
-
什么是
UserNameTableViewCell? -
这是一个例子。因此,如果我从
BaseTableViewCell类中继承UserNameTableViewCell并且不自己设置accessibilityLabel,那么我希望accessibilityLabel是 UserNameTableViewCell。然而它返回 "(BaseTableViewCell) -> () -> BaseTableViewCell"。现在清楚了吗? -
在(非惰性)属性初始化程序中使用
self通常是编译器错误,但不幸的是,您的情况并非如此,因为NSObjectProtocol有一个您可以参考的self()实例方法to – 在这里比较我的评论stackoverflow.com/questions/50393312/…
标签: swift initialization default-value getter-setter