我从CS193P课程学习了Swift语言。它推荐以下API用于ViewController FaceViewController
更新其视图FaceView
:
var expression = FacialExpression(eyes: .Closed, eyeBrows: .Relaxed, mouth: .Smirk) {
didSet {
updateUI() // Model changed, so update the View
}
}
然而,我还没有看到这个概念的扩展,即视图更新自己的模型。例如,以下内容没有意义:
// Implementing an imaginary delegate UIFaceViewDelegate
func faceView(_ faceView: FaceView, didEpdateExpressionTo expression: FacialExpression {
self.expression = expression
// This triggers another update to the view, and possibly infinite recursion
}
在Objective-C中,这非常简单,因为您可以使用getter和setter作为公共API,使用后备存储作为私有状态。Swift也可以使用计算变量来使用此方法,但我认为Swift的设计者有不同的想法。
那么,在响应视图更新时,表示状态更改的适当方式是什么,同时还向其他人公开合理的读/写API以检查其状态?
layoutSubviews()
中那样在视图控制器中更新视图吗? - MohyGself.expression = expression
没有意义?它是如何创建递归的? - Sulthan