struct default initialiser不触发didSet

时间:2016-07-27 11:49:35

标签: ios swift xcode struct

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()永远不会被调用。

任何人都可以解释原因吗?

2 个答案:

答案 0 :(得分:4)

在初始化期间不会调用属性观察者。

查看this问题。

答案 1 :(得分:2)

你的didSet不知道要观察什么变量,所以正确的声明是

var expression = FacialExpression(eyes: .Open, eyeBrows: .Normal, mouth: .Smile) {

    didSet(expression) {
        updateUI()
    }

}