swift – 显式设置为true Bool以某种方式设置为false
请执行下列操作:
创建一个名为A的类,UITableViewCell的子类: class A: UITableViewCell { var isChosen: Bool = true } 创建一个xib文件并将UITableViewCell对象作为顶级对象拖动,并确保将其类设置为A: 创建A的实例: var a = NSBundle.mainBundle().loadNibNamed("A",owner: nil,options: nil)[0] as A 打印isChosen: println(a.isChosen) 输出: false 为什么会这样?它只发生在从笔尖初始化实例时. 即使您将变量声明为可选项并将其设置为nil: var isChosen: Bool! = nil 某种程度上它仍然会被设置为假.
由于您的类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并根据需要进行标记来解决,因此A应包含以下代码: required init(coder aDecoder: NSCoder!) { super.init(coder: aDecoder) } 这个怎么运作?来自Beta 5发行说明:
更新: 必须添加必需的init(编码器aDecoder:NSCoder!){…}只有在你的类中至少覆盖一个init方法时才会添加. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |