我有时会看到这样的视图,在两个不同的init方法中有相同的setup()函数. init方法之间有什么区别,为什么在两个方法中调用相同的setup()?
class BigButton: UIButton { override init(frame: CGRect) { super.init(frame: frame) setup() } required init?(coder: NSCoder) { super.init(coder: coder) setup() } fileprivate func setup() { // set up stuff } }
解决方法
当您以编程方式创建视图(在本例中为按钮)时,将使用override init(frame:CGRect).
从storyboard / xib创建视图时使用必需的init?(编码器:NSCoder).
因为后者是必需的,你必须实现它的身体.但是,如果您不打算手动创建按钮,则不需要第一个按钮,可以省略
在两者中都调用了setup,因为无论您选择创建按钮,都要设置其自定义行为,以便按预期工作