显式设置为true Bool以某种方式设置为false

时间:2014-08-01 19:25:26

标签: swift

执行以下操作:

创建一个名为A的类,UITableViewCell的子类:

class A: UITableViewCell {
    var isChosen: Bool = true
}

创建一个xib文件并将UITableViewCell对象拖动为顶级对象,并确保将其类设置为A

enter image description here enter image description here

创建A的实例:

var a = NSBundle.mainBundle().loadNibNamed("A", owner: nil, options: nil)[0] as A

打印isChosen

println(a.isChosen)

输出:

false

为什么会这样?它只在从笔尖初始化实例时发生。

即使您将变量声明为可选项并将其设置为nil

var isChosen: Bool! = nil

1 个答案:

答案 0 :(得分:4)

由于您的类A没有定义任何init方法,因此swift自动为您生成默认初始值设定项。使用默认init()方法代码var isChosen: Bool = true是一个快捷方式:

class A: UITableViewCell {
    var isChosen: Bool

    init() {
        isChosen = true
    }
}

当您从Nib创建类型为A的自定义单元格时,自动生成的init()方法不会被调用,因为initWithCoder调用因此isChosen值为false }。


<强>更新

正如@MattGibson在对该问题的评论中所提到的,通过 xCode 6 Beta 5 更新,我们可以解决这个问题。可以通过添加init with coder初始化程序并根据需要对其进行标记来解决,因此A应包含以下代码:

required init(coder aDecoder: NSCoder!) {
    super.init(coder: aDecoder)
}

它是如何工作的?从Beta 5发行说明:

  

在每个子类实现之前编写必需的修饰符   必需的初始化程序。可以满足所需的初始化程序   自动继承初始化器。

<强>更新

只有在您的班级中至少覆盖一个required init(coder aDecoder: NSCoder!) { ... }方法时,才应添加

init