Swift学习笔记十四:构造(Initialization)

这篇博客探讨了Swift中的构造过程,包括如何为存储型属性设置默认值或在构造器中赋值,指出这些操作不会触发行置器。文章主要关注初始化的基本语法和继承中的构造流程。
摘要由CSDN通过智能技术生成
     类和结构体在实例创建时,必须为所有存储型属性设置合适的初始值。存储型属性的值不能处于一个未知的状态。
     你可以在构造器中为存储型属性赋初值,也可以在定义属性时为其设置默认值。以下章节将详细介绍这两种方法。
注意:

     当你为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的,不会触发任何属性观测器(property observers)。

一、基本语法

class Human{
    var name :String
    init(){
        name = "human"
    }
    init(name:String){
        self.name = name;
    }
}
var a = Human(name:"小笨狼")

重点:
     ① 构造函数使用 init 关键字
     ② 一个类或者结构体中构造函数可以有多个,但是他们参数必须不一样(参数名称或者个数不一样)
     ③ 带参数的构造函数,默认参数名为外部参数名,调用时需要带上参数名,如 Human (name: " 小笨狼 " )
     ④ 类和结构体必须为所有存储属性赋予初始值,初始值可以在定义时,或者构造函数中赋予
     ⑤ 当为储存属性设置初始值时,不会触发任何观察器
     ⑥ 若属性类型为可选类型,则初始值默认为nil。这时候可以不手动赋值
     ⑦ 对于常量属性,也可以在构造函数中赋值,如本例中 self . name  = name;

二、默认构造器
     Swift 将为所有属性已提供默认值的且自身没有定义任何构造器的结构体或基类,提供一个默认的构造器。

class Human{
    var name :String?
}
var a = Human() //这时候初始化调用的是默认构造器,编译器会自动生成一个构造器,将name=nil

struct Student{
    let name:String?
    let score = 0
}
var b = Student(name:"小笨狼",score:10) //结构体默认构造器是逐一成员构造器

重点:
     ① 对于类,默认构造器是普通构造器,调用时不需要输入任何参数,构造器会将默认值赋予给属性
     ② 对于结构体,默认构造器是逐一成员构造器,初始化时需要传入初始值,如: Student (name: " 小笨狼 " ,score: 10 )

三、 便利构造器和指定构造器
     指定构造器是类中最主要的构造器。每个类中至少拥有一个指定构造器。便利构造器是类中比较次要的、辅助型的构造器。类中可以没有便利构造器

class Human{
    var name :String?
    init(name:String){      //指定构造器
        self.name = name
    }
    convenience init(){     //便利构造器  
        self.init(name:"小笨狼")
    }
}

重点:
     ① 便利构造器使用 convenience   关键字定义,指定构造器不适用任何东西
     ② 便利构造器必须要调用指定构造器,否则编译器会报错

四、继承与构造

class Student:Human{
    var score:Int
    init(name: String,score:Int){
        self.score = score
        super.init(name:name)
    }
    convenience init() {
        self.init(name:"小笨狼",score:98)
    }
}

重点:
     ① 指定构造器必须要调用父类构造器
     ② 指定构造器必须先将本类中新属性赋值,再调用父类构造器

四、通过闭包来设置默认值
     如果某个存储型属性的默认值需要特别的定制或准备,你就可以使用闭包或全局函数来为其属性提供定制的默认值。

class student{
    var score:Int[] = {
        var scores:Int[] = Array()
        for m in 0...3{
                scores.append(m)
            }
            return scores
    }()
}

     score的默认值是一个数组,为了设置这个数组,需要使用一个for循环,这时候就可以使用闭包,在闭包中设置这个数组。来设置默认值
注意:
     ① 闭包后需要加(), 这是用来告诉 Swift 需要立刻执行此闭包,否则会把闭包本身作为值赋值给了属性



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值