gpt4 book ai didi

swift - 获取错误的默认值

转载 作者:行者123 更新时间:2023-11-28 14:36:56 25 4
gpt4 key购买 nike

我编写了一个自定义 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 作为返回 "(BaseTableViewCell) -> () -> BaseTableViewCell"

这是为什么?!

最佳答案

self 在第二个版本的代码中调用它时未初始化,这就是它显示父类(super class)名称的原因。

如果您将该变量设置为 lazy,它不会从一开始就设置,但会在您执行 myInstance.accesibilityLabel, 时正确设置,从而确保类的名称已经可用,因为 self 已经被初始化。

关于swift - 获取错误的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50823605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com