OC的时候,在init方法中给class一些创建过程中必填的属性,是很常用的方法了
比如
{
self = [super initWithFrame:frame];
if (self) {
self.buttonClickBlock = buttonClick;
}
return self;
}```
如此的简单明
swift汇总init方法被限制了些许,用过许多次了但也是一知半解,有些问题虽然很浅显,也着实让人恼火,小小的init,错了这么多次,忽略什么convenience
- 第一种就是这了,按照OC的方式,写一个init之后,会提示`initWithCoder`必须要实现,这个好解决,自动补齐就行了
![图片.png](http://upload-images.jianshu.io/upload_images/5315139-90dff26dd9e63fae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 补齐之后又来了
![图片.png](http://upload-images.jianshu.io/upload_images/5315139-71e0e2b170e7cdfd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
什么鬼,明明在里面赋值了,怎么还不行!原来`application`是子类的属性,子类的属性必须要在init之前创建,此时明显在init之前了
- 好嘛,我后super,总行了吧
![图片.png](http://upload-images.jianshu.io/upload_images/5315139-f4184d61dd7bbe76.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
shit,又说我不能提前用title。。。
- 过好歹是一直给着提示,最终:
![图片.png](http://upload-images.jianshu.io/upload_images/5315139-65dcb0f0c7c9404e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#### 总结
init的时候,除去convenience什么的不说,单单init方法中,就要分两部分写,子类自有的属性,需要在super之前创建,而父类所拥有的属性,需要在`super.init`之后赋值,
> 其实从OC转变过来的我有个疑问,不是应该调完***super.init***之后才创建了当前实例么,之前set属性是给谁set的?