2016-07-27 43 views
1

的Xcode版本:7.3.1结构默认初始化器不会触发didSet

大家好,

我有最新的Uni斯坦福大学课程的iOS沿着以下。在正在创建的其中一个应用中,我们创建了一个具有多个属性的结构。

因为它是一个结构,我得到一个免费的初始化程序,我在我的控制器中调用。然后我使结构实例成为一个计算属性,以便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 

} 
} 

这里是它在创建结构

class FaceController: UIViewController { 

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

    didSet { 
     updateUI() 
    } 

} 
} 

该控制器的一个实例控制器的应用程序和初始化线的默认和唯一的控制器也被调用。

didSet()永远不会被调用。

任何人都可以解释为什么吗?

回答

2

您didSet不知道看什么变量,以便正确的声明是

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

    didSet(expression) { 
     updateUI() 
    } 

} 
+0

虽然Viktors的答案很奏效,但这是最好的答案,因为它确定了我做错了什么,而不是解决问题。 – Stephen

4

属性观察器在初始化过程中不会被调用。

看看this的问题。

+0

喜there.Thanks的答案。看起来像是碰到了指头 – Stephen