2020-04-15

Swift之默认与自定义构造函数

引入:不给存储属性赋值,报错

定义类属性不报错,结构体的实例时必须为所有的存储属性设置一个合适的初始值

不报错,3种方式:

1 可选型

2 直接定义的时候初始化,直接=

3 构造函数中初始化


知识点一:构造函数的作用

1、构造函数用于初始化一个类的实例(创建对象)

2、默认情况下载创建一个类时,必然会调用一个构造函数

3、即便是没有编写任何构造函数,编译器也会提供一个默认的构造函数


知识点二:默认构造函数

1、使用 init 关键字来写,

2、构造函数没有func修饰

3、构造函数默认完成调用 不能手动调用

4、构造函数就像一个没有形式参数的实例方法,


知识点三:自定义构造函数

1、可以自定义构造函数

2、自定义构造函数和默认构造函数可以同时存在

```

class Person{

    var name:String

    var age:Int

    var sex:String

    //默认构造函数

    init() {

        print("init被调用")

        self.name = "张三"

        self.age = 10

        self.sex = "男"

    }

    //自定义构造函数

    init(name:String,age:Int,sex:String){

        self.name = name

        self.age = age

        self.sex = sex

    }

}

var p = Person()

p.name

p.age


var p2 = Person(name: "lisi", age: 18, sex: "女")

```


Swift之指定与便利构造函数

1、概念


1)指定:标配,至少一个,初始化所有属性

思考:怎么判断是不是指定函数?就看是不是初始化了所有存储属性。

2)便利:辅助,最终调用本类里的指定。

思考:如何区分指定和便利?


2、语法结构

便利构造函数需要在init前加上convinience关键字


3、必须遵守的规范(案例演示)


规则 1——指定构造函数必须从它的直系父类调用指定构造函数

规则 2——便捷构造函数必须从相同的类里调用另一个构造函数(可以是指定也可以是便捷)

规则 3——便捷构造函数最终必须调用一个指定构造函数

简单记忆的这些规则的方法如下:

指定构造函数必须总是向上委托。

便捷构造函数必须总是横向委托。


```

import Foundation

class Car{

    var speed:Double

  // var a:Int

   

    //指定构造函数(初始化所有属性)

    init(speed:Double) {

        self.speed = speed

    }

   

    //便捷构造函数,必须调用指定构造函数

    convenience init() {

        self.init(speed: 80.0)

    }

}


class Bus:Car{

    var wheels:Int

    var banner:String

   

    //指定构造器:提问初始化几个属性  自己的属性自己初始化,父类的调用父类

    init(wheels:Int,banner:String,speed:Double) {

        self.wheels = wheels

        self.banner = banner

        //  self.speed = speed 必须用父类指定构造函数初始化

        super.init(speed: speed)

    }

   

    //便捷构造器-必须调用其他的构造函数(指定)

    convenience init(wheels:Int) {

        self.init(wheels: wheels, banner: "", speed: 0.0)

        print("test")

    }

 

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容