我试图编写一个类型为UIView的类,但在初始化时我希望它采取额外的参数,但我无法弄清楚如何绕过需要其params的UIView 。非常感谢任何帮助!
class MenuBar: UIView {
let homeController: HomeController
init(controller: HomeController){
homeController = controller
super.init()
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
在ViewController中,我将它初始化为:
let menuBar: MenuBar = {
let mb = MenuBar(controller: self)
return mb
}()
答案 0 :(得分:6)
试试这个。
class MenuBar: UIView {
let homeController: HomeController
required init(controller: HomeController){
homeController = controller
super.init(frame: CGRect.zero)
// Can't call super.init() here because it's a convenience initializer not a desginated initializer
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
答案 1 :(得分:3)
根据我的经验,如果您想为Promise.all([rentals(), drivers(), vehicles()])
.then((results) => {
this.setState({
rentalsData: results[0],
driversData: results[1],
vehiclesData: results[2]
});
});
设置自定义初始化程序,那么效果最佳:
UIView
无论创建视图的方法(故事板和代码),此方法都允许您保留常见的初始化代码
这是关于正确创建UIView。
此外,我建议避免将class CustomView : UIView {
private var customProperty: CustomClass
required init(customProperty: CustomClass) {
super.init(frame: .zero)
self.customProperty = customProperty
self.setup()
}
required override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
}
fileprivate func setup() {
//Here all custom code for initialisation (common for all creation methods)
}
}
传递给UIViewController
- 我认为您正试图以错误的方式解决某些问题。
在这两者之间进行通信的更好方法是使用UIView
或delegate
- 但这有点偏离主题 - 也许你可以创建另一个关于为什么要像这样传递它的问题。