获取错误的默认值
Getting wrong default value
我写了一个自定义的 TableViewCell class,它可以是 return 上面设置的 accessibilityLabel
,或者只是 return 它的 class 名称accessibilityLabel
。尽管以下两个实现之一没有按预期工作。我试图理解为什么...
returns 正确 class姓名
class BaseTableViewCell: UITableViewCell {
var _acsLabel: String?
override var accessibilityLabel: String?{
get{
return _acsLabel ?? "\(type(of: self))"
}set (newValue) {
_acsLabel = newValue ?? ""
}
}
}
returns 不正确 class 姓名
class BaseTableViewCell: UITableViewCell {
var _acsLabel: String? = "\(type(of: self))"
override var accessibilityLabel: String?{
get{
return _acsLabel
}set (newValue) {
_acsLabel = newValue ?? ""
}
}
}
两个版本都正确 return 如果我设置 accessibilityLabel
的值,但是如果没有设置默认值,它们 return 是不同的。
例如我子class UserNameTableViewCell
关闭我的 BaseTableViewCell
class 并且 不 设置 accessibilityLabel
然后我自己:
- 正确的版本 return 是
accessibilityLabel
作为 UserNameTableViewCell。
- 不正确的版本 returns
accessibilityLabel
为 returns "(BaseTableViewCell) -> () -> BaseTableViewCell"
这是为什么?!
self
在第二个版本的代码中调用时没有初始化,这就是为什么它显示超级 class.
的名称
如果您将该变量设置为 lazy
,它不会从一开始就设置,但会在您设置 myInstance.accesibilityLabel,
时正确设置,从而确保 class 已经可用,因为 self
会被初始化。
我写了一个自定义的 TableViewCell class,它可以是 return 上面设置的 accessibilityLabel
,或者只是 return 它的 class 名称accessibilityLabel
。尽管以下两个实现之一没有按预期工作。我试图理解为什么...
returns 正确 class姓名
class BaseTableViewCell: UITableViewCell {
var _acsLabel: String?
override var accessibilityLabel: String?{
get{
return _acsLabel ?? "\(type(of: self))"
}set (newValue) {
_acsLabel = newValue ?? ""
}
}
}
returns 不正确 class 姓名
class BaseTableViewCell: UITableViewCell {
var _acsLabel: String? = "\(type(of: self))"
override var accessibilityLabel: String?{
get{
return _acsLabel
}set (newValue) {
_acsLabel = newValue ?? ""
}
}
}
两个版本都正确 return 如果我设置 accessibilityLabel
的值,但是如果没有设置默认值,它们 return 是不同的。
例如我子class UserNameTableViewCell
关闭我的 BaseTableViewCell
class 并且 不 设置 accessibilityLabel
然后我自己:
- 正确的版本 return 是
accessibilityLabel
作为 UserNameTableViewCell。 - 不正确的版本 returns
accessibilityLabel
为 returns "(BaseTableViewCell) -> () -> BaseTableViewCell"
这是为什么?!
self
在第二个版本的代码中调用时没有初始化,这就是为什么它显示超级 class.
如果您将该变量设置为 lazy
,它不会从一开始就设置,但会在您设置 myInstance.accesibilityLabel,
时正确设置,从而确保 class 已经可用,因为 self
会被初始化。