我创建了一个类继承UITableViewCell
:
class MyCell: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
没有编译器错误。然后,我宣布了一个计算变量:
class MyCell: UITableViewCell {
var student: Student{
willSet {...}
}
...
}
现在,编译器开始抱怨Class 'MyCell' has no initializers
。然后,我定义了一个空的初始值:
class MyCell: UITableViewCell {
init(){}
var student: Student{
willSet {...}
}
...
}
错误仍然存在。为什么在声明计算变量之后,编译器开始抱怨错误&如何摆脱这个错误?
答案 0 :(得分:1)
在{1}中设置(非可选)数据模型项的表视图单元格中的推荐解决方案是隐式展开的可选项。
无需覆盖任何初始值设定项。
cellForRow...
注意:
class MyCell: UITableViewCell {
var student: Student! {
willSet {...}
}
}
不是计算属性。属性观察者只能在存储的属性中使用。
答案 1 :(得分:0)
尝试让您的学生成为可选的变种
var student: Student? {
willSet {...}
}
答案 2 :(得分:0)
你应该试试这些:
选项1:
var student: Student! {
willSet {...}
}
选项2:
var student: Student? {
willSet {...}
}
因为我们必须初始化一个变量,否则编译器会给出错误。在选项1 中,我们将此变量声明为隐式展开的可选。这意味着它的初始值为零,但它的价值将来不会为零。在选项2 中,我们已将此变量声明为可选,这意味着它最初为零,并且将来可能没有值。或者您可以在此处初始化变量。
选项3:
var student: Student = Student() {
willSet {...}
}
但是在这里你使用的是willSet{}
,这意味着你得到的是动态值,而不是编译时间。所以我认为第一个选项将删除您的错误。您应该尝试最适合您的最佳选择。
<强>结论强>
我们必须初始化一个变量。