xcode版本:7.3.1
大家好,
我正在关注最新的Stanford Uni iOS课程。在其中一个正在创建的应用程序中,我们创建了一个具有许多属性的结构。
因为它是一个结构体,我得到一个免费的初始化器,我在控制器中调用它。然后我将struct实例作为计算属性,以便调用didSet。
这里是结构
struct FacialExpression
{
var eyes: Eyes = Eyes.Open
var eyeBrows: EyeBrows = EyeBrows.Normal
var mouth: Mouth = Mouth.Smile
enum Eyes: Int {
case Open
case Closed
case Squinting
}
enum EyeBrows: Int {
case Relaxed
case Normal
case Furrowed
func moreRelaxedBrow() -> EyeBrows {
return EyeBrows(rawValue: rawValue - 1) ?? .Relaxed
}
func moreFurrowedBrow() -> EyeBrows {
return EyeBrows(rawValue: rawValue + 1 ) ?? .Furrowed
}
}
enum Mouth: Int {
case Frown
case Smirk
case Neutral
case Grin
case Smile
}
}
这是创建struct
实例的控制器class FaceController: UIViewController {
var expression = FacialExpression(eyes: .Open, eyeBrows: .Normal, mouth: .Smile) {
didSet {
updateUI()
}
}
}
此控制器是应用程序中的默认控制器,只有控制器才会被调用。
didSet()永远不会被调用。
任何人都可以解释原因吗?
答案 0 :(得分:4)
在初始化期间不会调用属性观察者。
查看this问题。
答案 1 :(得分:2)
你的didSet不知道要观察什么变量,所以正确的声明是
var expression = FacialExpression(eyes: .Open, eyeBrows: .Normal, mouth: .Smile) {
didSet(expression) {
updateUI()
}
}