美文网首页
swift-require关键字使用的时机

swift-require关键字使用的时机

作者: 温柔的熊 | 来源:发表于2018-10-24 19:14 被阅读0次

在swift里,方法之前加require关键字之后,所有继承该类的子类都要重新实现该方法。那么什么时候我们会用到require这个关键字呢?其实,之前已经说了,当所有继承该类的子类都要重新实现该方法的时候,就用它。那么,什么时候我们会遇到这种场景呢?我遇到了这种场景,看下面的例子。

需要require的例子

tClass是一个FeedItemModel.Type类型,也就是说它有可能是FeedItemModel,也有可能是FeedItemModel子类,这个时候,tClass在调用init()方法的时候就需要在init方法的声明前加上require,如下。

init方法的思考

刚写到这里的时候,我产生了一个疑问,每个子类都会继承父类的init方法,也就是说子类里都是有init方法的,为什么还要加required强调一下呢?这违背了代码设计中的简单原则。可是去掉required又会报错。

原来,这和swift的构造规则有关。首先,swift和oc不一样,它不会自动继承父类的构造器方法,等等,这里好像有了另外一个问题,如果swift不会自动继承父类的构造器方法,那上面所说的“每个子类都会继承父类的init方法”不就是错误的么?严格来说,这确实是错的。因为swift确实是不会自动继承父类的构造器方法,但是在这两个条件下会继承

1、如果子类没有定义任何指定构造器,它将自动继承所有父类的指定构造器。

2、如果子类提供了所有父类指定构造器的实现——无论是通过规则 1 继承过来的,还是提供了自定义实现——它将 自动继承所有父类的便利构造器。 

所以,在一开始我产生的疑问就是错的,“每个子类都会继承父类的init方法”在swift里并不正确,换句话说,父类里有init方法,子类里并不一定会有,因此swift非常严谨的告诉我们,在你用FeedItemModel.Type这样的方式调用init方法时,init方法前一定要加上required,因为它不能确定你的子类是否实现了这个方法。

相关文章

  • swift-require关键字使用的时机

    在swift里,方法之前加require关键字之后,所有继承该类的子类都要重新实现该方法。那么什么时候我们会用到r...

  • 类加载机制

    类加载的时机 主动引用(有且只有下面的五种) 使用new关键字创建对象时,访问类的静态字段时; 使用java.la...

  • java静态代码块、静态方法、静态变量、构造代码块、普通代码块

    一、静态代码块 在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块: 执行时机静态...

  • Java实战开发篇-5 继承和多态

    一、继承 1.关键字 extend 2.使用时机 如果一个类与另一个类在许多方面有相似关系,则可以使用到继承。比如...

  • 面向对象

    一、类和对象 二、封装 三、继承 Java中final关键字的使用 final关键字: 使用final关键字做标识...

  • 235 ref和out关键字

    ref关键字 使用ref关键字可以将值类型变量按照引用方式传递 out关键字 使用out关键字可以让方法有多个返回...

  • 使用指针的时机

    什么时候使用指针 c++ primer: 程序不知道需要创建多少个对象 程序不知道所需对象准确的数据类型。(比如,...

  • 组件编写

    super关键字 使用class关键字时无法使用super.method,解决方案

  • 4.常规增删改查操作

    1.添加数据使用关键字insert 2.删除数据使用关键字delete 3.修改数据使用关键字update 4.查...

  • spring data jpa HQL语句中使用like关键字

    hql中怎样使用like关键字? 在使用spring data jpa实现关键字查询功能的时候,使用了like关键...

网友评论

      本文标题:swift-require关键字使用的时机

      本文链接:https://www.haomeiwen.com/subject/ervxtqtx.html