假设我想要一个UIView
子类,一个String
,一个Int
.
如果我只是将UIView
子类化,那么在Swift中如何实现这一点?如果我只是创建了一个自定义init()
函数,但参数是一个字符串和一个Int,它会告诉我"super.init()在从初始值设定项返回之前不会被调用".
如果我拨打super.init()
,系统会告诉我必须使用指定的初始值设定项.我应该在那里用什么呢?帧版本?编码器版本?两个都要吗?为什么?
假设我想要一个UIView
子类,一个String
,一个Int
.
如果我只是将UIView
子类化,那么在Swift中如何实现这一点?如果我只是创建了一个自定义init()
函数,但参数是一个字符串和一个Int,它会告诉我"super.init()在从初始值设定项返回之前不会被调用".
如果我拨打super.init()
,系统会告诉我必须使用指定的初始值设定项.我应该在那里用什么呢?帧版本?编码器版本?两个都要吗?为什么?
init(frame:)
版本是默认的初始值设定项.只有在初始化实例变量后才能调用它.如果此视图是从Nib重新构建的,则不会调用自定义初始值设定项,而是会调用init?(coder:)
版本.由于Swift现在需要实现所需的init?(coder:)
,我更新了下面的示例,并将let
变量声明更改为var
和可选.在本例中,您将在awakeFromNib()
或稍后的某个时间初始化它们.
class TestView : UIView {
var s: String?
var i: Int?
init(s: String, i: Int) {
self.s = s
self.i = i
super.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}