为什么初始化在相似的代码片段中顺序不同.斯威夫特 4.



为什么这个片段的工作方式不同:

1 - 工作正常

class TableViewCell: UITableViewCell {
@IBOutlet weak var fullName: UILabel!
@IBOutlet weak var age: UILabel!
var viewModel: TableViewCellViewModelType? {
willSet(viewModel) {
fullName.text = viewModel?.fullName
age.text = viewModel?.age
}
}
}

2 - 错误,因为标签等于 nil。但是如果我删除 willSet 块并使用 viewWillAppear 代替,这个片段效果很好

class DetailViewController: UIViewController {
@IBOutlet weak var label: UILabel!
var viewModel: DetailViewModelType? {
willSet(viewModel) {
guard let viewModel = viewModel else { return }
self.label.text = viewModel.description
}
}
}

为什么对于第一种情况,一切正常,所有出口都不为零,第二种情况以另一种方式工作,并且在设置视图模型的那一刻出口为零(来自源 VC 的 prepareForSegue 方法(

第二种情况标签为 nil,因为 VC 尚未呈现,因此它的所有出口均为 nil(相比之下viewWillAppear(,但它适用于已经加载的单元格

最新更新