iOS-swift

Swift init 方法的坑与填

2017-05-30  本文已影响275人  山已几孑

OC的时候,在init方法中给class一些创建过程中必填的属性,是很常用的方法了
比如

{
    self = [super initWithFrame:frame];
    if (self) {
        self.buttonClickBlock = buttonClick;
    }
    return self;
}```
如此的简单明

swift汇总init方法被限制了些许,用过许多次了但也是一知半解,有些问题虽然很浅显,也着实让人恼火,小小的init,错了这么多次,忽略什么convenience
- 第一种就是这了,按照OC的方式,写一个init之后,会提示`initWithCoder`必须要实现,这个好解决,自动补齐就行了
![图片.png](http:https://img.haomeiwen.com/i5315139/90dff26dd9e63fae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 补齐之后又来了

![图片.png](http:https://img.haomeiwen.com/i5315139/71e0e2b170e7cdfd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
什么鬼,明明在里面赋值了,怎么还不行!原来`application`是子类的属性,子类的属性必须要在init之前创建,此时明显在init之前了
- 好嘛,我后super,总行了吧

![图片.png](http:https://img.haomeiwen.com/i5315139/f4184d61dd7bbe76.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
shit,又说我不能提前用title。。。
- 过好歹是一直给着提示,最终:

![图片.png](http:https://img.haomeiwen.com/i5315139/65dcb0f0c7c9404e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#### 总结
  init的时候,除去convenience什么的不说,单单init方法中,就要分两部分写,子类自有的属性,需要在super之前创建,而父类所拥有的属性,需要在`super.init`之后赋值,

  > 其实从OC转变过来的我有个疑问,不是应该调完***super.init***之后才创建了当前实例么,之前set属性是给谁set的?

上一篇下一篇

猜你喜欢

热点阅读