结构默认初始化程序未触发 didSet
Posted
技术标签:
【中文标题】结构默认初始化程序未触发 didSet【英文标题】:struct default initialiser not triggering didSet 【发布时间】:2016-07-27 11:49:35 【问题描述】:xcode 版本:7.3.1
大家好,
我正在关注最新的斯坦福大学 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
这是创建结构实例的控制器
class FaceController: UIViewController
var expression = FacialExpression(eyes: .Open, eyeBrows: .Normal, mouth: .Smile)
didSet
updateUI()
此控制器是应用程序中的默认且唯一的控制器,并且确实会调用 init 行。
didSet() 永远不会被调用。
谁能解释一下原因?
【问题讨论】:
【参考方案1】:在初始化期间不会调用属性观察器。
看看this的问题。
【讨论】:
您好。谢谢您的回答。看起来你一针见血【参考方案2】:你的 didSet 不知道要观察什么变量,所以正确的声明是
var expression = FacialExpression(eyes: .Open, eyeBrows: .Normal, mouth: .Smile)
didSet(expression)
updateUI()
【讨论】:
虽然 Viktors 的答案有效,但这是最好的答案,因为它确定了我做错了什么而不是解决它。以上是关于结构默认初始化程序未触发 didSet的主要内容,如果未能解决你的问题,请参考以下文章