Swift学习笔记十四:构造(Initialization)
类和结构体在实例创建时,必须为全部存储型属性设置合适的初始值。
存储型属性的值不能处于一个未知的状态。
你能够在构造器中为存储型属性赋初值,也能够在定义属性时为其设置默认值。下面章节将具体介绍这两种方法。
注意:
当你为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的。不会触发不论什么属性观測器(property
observers)。
一、基本的语法
class Human{
var name :String
init(){
name = "human"
}
init(name:String){
self.name = name;
}
}
var a = Human(name:"小笨狼")
重点:
① 构造函数使用initkeyword
② 一个类或者结构体中构造函数能够有多个,可是他们參数必须不一样(參数名称或者个数不一样)
③ 带參数的构造函数。默认參数名为外部參数名。调用时须要带上參数名,如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 keyword定义,指定构造器不适用不论什么东西
② 便利构造器必须要调用指定构造器,否则编译器会报错
四、继承与构造
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 须要立马运行此闭包,否则会把闭包本身作为值赋值给了属性
Swift学习笔记十四:构造(Initialization)的更多相关文章
- Swift学习笔记十四
Deinitialization 当类的实例对象即将要被释放时,会立即调用deinitializer,通过deinit关键字来定义deinitializer,和initializer一样,它也只存在于 ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- (C/C++学习笔记) 十五. 构造数据类型
十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...
- (C/C++学习笔记) 十四. 动态分配
十四. 动态分配 ● C语言实现动态数组 C语言实现动态数组,克服静态数组大小固定的缺陷 C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量.一旦定义了一个数组,系统将为它分配一个 ...
- swift 笔记 (十四) —— 构造过程
构造过程 为了生成类.结构体.枚举等的实例,而做的准备过程,叫做构造过程. 为了这个过程,我们一般会定义一个方法来完毕,这种方法叫做构造器.当然它的逆过程,叫做析构器,用于在实例被释放前做一些清理工作 ...
- Swift 学习笔记(四)
116.使用可选链式调用代替强制展开 通过在想调用的属性.方法.或下标的可选值(optional value)后面放一个问号(?),可以定义一个可选链.这一点很像在可选值后面放一个叹号(!)来强制展开 ...
- Swift学习笔记十六:协议
Protocol(协议)用于统一方法和属性的名称,而不实现不论什么功能. 协议可以被类.枚举.结构体实现.满足协议要求的类,枚举,结构体被称为协议的遵循者. 遵循者须要提供协议指定的成员,如属性,方法 ...
- 【swift学习笔记】四.swift使用Alamofire和swiftyJson
Alamofire是AFNetworking的swift版本,功能灰常强大. github:https://github.com/Alamofire/Alamofire SwiftyJSON是操作js ...
- SharpGL学习笔记(十四) 材质:十二个材质球
材质颜色 OpenGL用材料对光的红.绿.蓝三原色的反射率来近似定义材料的颜色.象光源一样,材料颜色也分成环境.漫反射和镜面反射成分,它们决定了材料对环境光.漫反射光和镜面反射光的反射程度.在进行光照 ...
随机推荐
- Python3.6中文文档 又来推荐一个,之前的Python3.52看得有点懵逼 https://www.rddoc.com/doc/Python/3.6.0/zh/
https://www.rddoc.com/doc/Python/3.6.0/zh/ 大家有空看下
- Nginx安装及基本配置
本文内容: 90%来自以下网址:http://www.nginx.cn/install ,修改了一些版本信息 10%来自以下网址:http://nginx.org/en/docs/beginners_ ...
- 杭电 2647 Reward (拓扑排序反着排)
Description Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wants to ...
- Sql按照字段分组,选取其他字段最值所在的行记录
引言: 为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录. 参考:红黑联盟 所用到的数 ...
- SSRS ( .rdl文件)如何动态的设置导出Excel文件中的工作表标签名
要实现以上效果,则在Tablix属性里设置 参考:https://dotblogs.com.tw/ricochen/archive/2012/06/14/72798.aspx
- HDU 4334 5-sum
题目大意: 从5个集合中个选取一个数出来,使5个数相加之和为0 , 判断是否存在这种可能 因为集合数目最多200,那么200^3 = 8000000 , 那么这里很明显要把5个数拆成2个和3个计算,因 ...
- 【HDOJ6333】Harvest of Apples(莫队)
题意: 给定T组询问,每组有两个数字n和m,求sigma i=0..m c(n,i) 答案对1e9+7取模 T<=1e5 1<=n,m<=1e5 思路: 注意要先变n再变m,否则会因 ...
- 并发编程——IO模型
前言 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回.按照这个定义, ...
- Bootstrap3 为何无法显示Glyphicons 图标
Bootstrap3 为何无法显示Glyphicons 图标 在CSS引入字体即可解决 @font-face { font-family: 'Glyphicons Halflings'; src: u ...
- JOI 2019 Final合集
JOI 2019 Final 合集 #3010. 「JOI 2019 Final」勇者比太郎 其实如果读懂题了就是水题了 题目就是让你求满足条件的\(JOI\),使得\(O\)在\(J\)同行的 ...