SWIFT:init和super.init之间的区别

时间:2016-04-28 13:52:53

标签: xcode swift

我正在阅读The Swift Programming Language一书。

本书说,Init是在创建实例时设置类的初始化程序。 (我的理解是:通过创建实例,init()中的代码块将被执行)。

然而,这本书显示了super.init,但没有说明任何事情。

3 个答案:

答案 0 :(得分:4)

官方文档确实涵盖了初始化超类的方面:

  

Bicycle的init()初始化程序首先调用super.init(),它调用Bicycle类的超类Vehicle的默认初始化程序。这可确保在Bicycle有机会修改属性之前,由Vehicle初始化numberOfWheels继承的属性。调用super.init()后,numberOfWheels的原始值将替换为新值2.

对应的示例代码:

超类:

class Vehicle {
    var numberOfWheels = 0
    var description: String {
        return "\(numberOfWheels) wheel(s)"
    }
}

子类:

class Bicycle: Vehicle {
    override init() {
        super.init()
        numberOfWheels = 2
    }
}

Source

答案 1 :(得分:4)

让我们说你有一个对象

class myObject : NSObject {

    var a : Int
    var b : Int

    init() {
        a = 1
        b = 2
        super.init()
    }
}

因为myObject继承自NSObject,它必须调用super.init()来初始化它继承的对象的所有属性。而init会初始化特定于自定义对象的所有属性。

答案 2 :(得分:3)

super只是对超类的引用,并且该超类具有init方法,因此通过调用super.init(),您可以调用不带参数的超类的init方法。如果超类的init方法有参数

class Animal {
    init(name: String) {

    }
}

您必须将参数传递给此方法

class Cat: Animal {
    init() {
        super.init(name: "Cat")
    }
}

class PersianCat: Cat {
    override init() {
        super.init()
    }
}