美文网首页iOS Developer
iOS9 with Swift 类的构造器(五)

iOS9 with Swift 类的构造器(五)

作者: 小松树先生 | 来源:发表于2016-07-29 00:24 被阅读36次

要求构造器:

对于类的构造器还有一件事要说明:前缀为required的构造器。这意味着子类不能遗漏它。而这接下来就意味着如果一个子类使用指定构造器(这样会阻碍继承),它必须重写这个构造器(required)。一个例子:

1

这段代码无法编译。我们需要继承或者重写标记有required的构造器。由于,我们要引入新的Boolean值,因此不能采取继承的方法。所以我们要重写它:

2

上例中,被重写的required构造器并没有被override标记,而是被required标记,这说明required将会继续在NoiseDog的子类中继续传递。

以上是怎样制造一个要求构造器,下面我将谈谈为什么要制造要求构造器。


Cocoa带来的意外:

当你在subclassing某种Cocoa类的时候,构造器继承规定可能会导致一些意料之外的事情。比如,在进行iOS开发的过程中,你肯定会声明一个UIViewController的子类,let's say,你为你的子类设置一个指定构造器。这个指定构造器在父类(UIViewController)中是init(nibName:bundle:),所以,遵照规定,你调用了此构造器:

3

看起来还不错,但是你然后就会发现在别处的代码出现了问题:使得ViewController 实例不再编译了。

4

在写下指定构造器之前这段代码是合法的;现在则非法。原因在于在子类中使用指定构造器,将阻碍构造器继承,你需要重写该构造器(init(nibName:bundle)),即使你已经你在子类中调用过它。

5

这样图4中的实例就可以顺利编译了。

然而现在又有一个意外:ViewController 无法编译了。原因在于:有一个要求(required)构造器在ViewController中。所以你必须使用它。而你之前不了解它,因为当ViewController没有显式构造器,你继承了要求构造器;现在你又阻碍了继承。幸运的是,Xcode的Fix-It功能提供了stub运用。他不会做任何事(甚至调用它,程序将会崩溃),但是它使得程序可以编译:

6

在之后的章节中我会讲解这个要求构造器如何被使用。

相关文章

  • iOS9 with Swift 类的构造器(五)

    要求构造器: 对于类的构造器还有一件事要说明:前缀为required的构造器。这意味着子类不能遗漏它。而这接下来就...

  • swift学习笔记

    1.swift类的构造器 swift构造器有三种:指定构造器和, 便利构造器, 默认构造器. 其中用'conve...

  • Swift类的构造过程

    Swift类的存储型属性必须在构造过程完成后有值,Swift为类提供了两种构造器——指定构造器、便利构造器 指定构...

  • Swift面向对象

    创建一个类 类的四种属性 类的构造 swift类构造过程 指定构造器 便利构造器 KVC构造器 实例方法和类方法 ...

  • iOS开发 - 「Swift 学习」Swift的构造过程(四)

    类的继承和构造过程 Swift 提供指定构造器、便利构造器两种类型的类构造器来确保所有类实例中存储型属性都能获得初...

  • iOS9 with Swift 类的构造器(一)

    隐含构造器: 如果一个类,或是没有存储属性,或是已经初始存储属性在声明中,并且没有显式构造器,那么它就含有一个隐含...

  • iOS9 with Swift 类的构造器(二)

    子类的构造器 在阐明和辨别清楚指定构造器和便利构造器之后,我们就可以开始了解子类的构造器了。 未声明构造器: 如果...

  • iOS9 with Swift 类的构造器(三)

    重写构造器: 在子类中,父类的构造器是可以被重写的,并且依照如下的规定: 1、Signature与父类的便利构造器...

  • iOS9 with Swift 类的构造器(四)

    可失败构造器(Failable initializers): 直到一个可失败构造器完成了它所有的初始化任务,它才可...

  • Swift学习:构造器(中)

    Swift之构造器(上)Swift之构造器(中)Swift之构造器(下) 本篇继续对Swift中的构造器进行介绍,...

网友评论

    本文标题:iOS9 with Swift 类的构造器(五)

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