创建一个名为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
某种程度上它仍然会被设置为假.
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发行说明:
The required modifier is written before every subclass implementation
of a required initializer. required initializers can be satisfied by
automatically inherited initializers.
更新:
必须添加必需的init(编码器aDecoder:NSCoder!){…}只有在你的类中至少覆盖一个init方法时才会添加.
原文地址:https://www.jb51.cc/swift/319329.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。