【发布时间】:2017-05-30 15:21:01
【问题描述】:
我遇到了一些循环问题。请参阅 UIView 自定义初始化程序的目标 c 版本(或类似的内容):
-(instancetype)initWithFrame:(CGRect)frame data:(MyDataType) myData{
self = [super initWithFrame:CGRectMake(0, 0, 150, 200)];
if(self){
self.viewModel = [[MyViewModel alloc] initwith:self andWithData:myData];
}
return self;
}
现在这很快就变成了一种痛苦。使用以下内容时:
init(_ myData: MyDataModel){
viewModel = MyViewModel(view:self,data:myData)
super.init(frame:CGRect.zero)
}
现在问题出现了:
- 如果我先调用 super.init(frame:CGRect.zero),则会收到一个错误,即未设置视图模型。
- 如果我在视图模型初始化后调用super,那么显然有错误,因为self不存在
然后是这样的:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
- 如果不传入数据,如何初始化视图模型?
- 我也想知道如何处理框架问题,例如:
如果我有这样的 init 方法:
override init(frame: CGRect) {
super.init(frame: frame)
}
我可以像这样实例化对象:myView(),我不需要传入帧,我通常不需要传入帧,因为操作系统会自行排序。但是:
init(_ myData: MyDataModel){
viewModel = MyViewModel(view:self,data:myData)
super.init(frame:CGRect.zero)
}
现在需要我使用框架,我选择了CGRect.zero,但这是正确的方式吗?
【问题讨论】: