时间:2021-05-02
与 Objective-C 不同,Swift 的初始化方法需要保证类型的所有属性都被初始化。所以初始化方法的调用顺序就很有讲究。在某个类的子类中,初始化方法里语句的顺序并不是随意的,我们需要保证在当前子类实例的成员初始化完成后才能调用父类的初始化方法:
复制代码 代码如下:
class Cat {
var name: String
init() {
name = "cat"
}
}
class Tiger: Cat {
let power: Int
override init() {
power = 10
super.init()
name = "tiger"
}
}
一般来说,子类的初始化顺序是:
1.设置子类自己需要初始化的参数,power = 10
2.调用父类的相应的初始化方法,super.init()
3.对父类中的需要改变的成员进行设定,name = "tiger"
其中第三步是根据具体情况决定的,如果我们在子类中不需要对父类的成员做出改变的话,就不存在第 3 步。而在这种情况下,Swift 会自动地对父类的对应 init 方法进行调用,也就是说,第 2 步的 super.init() 也是可以不用写的 (但是实际上还是调用的,只不过是为了简便 Swift 帮我们完成了)。这种情况下的初始化方法看起来就很简单:
复制代码 代码如下:
class Cat {
var name: String
init() {
name = "cat"
}
}
class Tiger: Cat {
let power: Int
override init() {
power = 10
// 虽然我们没有显式地对 super.init() 进行调用
// 不过由于这是初始化的最后了,Swift 替我们完成了
}
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言我们在深入初始化方法之前,不妨先再想想Swift中的初始化想要达到一种怎样的目的。其实就是安全。在Objective-C中,init方法是非常不安全的:没有
本文给大家总结的struct数据有3种初始化方法1、顺序2、C风格的乱序3、C++风格的乱序下面通过示例代码详细介绍这三种初始化方法。1)顺序这种方法很常见,在
初始化类,结构和枚举当Swift声明后准备初始化类实例。初始值被初始化为存储属性,并且新的实例的值也被进一步进行初始化。创建初始化函数的关键字是通过init()
规则1(无继承情况下):对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器证明代码
在继承关系中,静态初始化、非静态初始化和构造函数的执行顺序publicclassExA{static{System.out.println("父类--静态代码块