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用材料对光的红.绿.蓝三原色的反射率来近似定义材料的颜色.象光源一样,材料颜色也分成环境.漫反射和镜面反射成分,它们决定了材料对环境光.漫反射光和镜面反射光的反射程度.在进行光照 ...
随机推荐
- Python的串口
要使用python中的串口,可以下载pywin32-224-cp36-cp36m-win_amd64.whl去安装或者pip install去安装. 调试下来,有一点很不爽,读取read()数据的ti ...
- C++实现顺序栈类求解中缀表达式的计算
控制台第一行打印的数值为使用形如以下方式得到的结果: cout << +*(+)*/- << endl; 即第一个待求解表达式由C++表达式计算所得结果,以用于与实现得出的结果 ...
- HaHa's Morning(状压DP)
描述 HaHa is so happy today, he is going to participate the 7th Hunan University Programming Contest. ...
- 从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧
zoom(zoom.us) 是一款受到广泛使用的在线会议软件.相信各位一定在办公.会议.聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板.聊天 ...
- UVA 11090 判负圈问题
题目链接http://vjudge.net/problem/viewProblem.action?id=34650 题目大意: 给定n个点m条边的加权有向图,求平均权值最小的回路.平均权值=路径权值之 ...
- 【Zeller公式计算星期几】HDU 6112 今夕何夕
acm.hdu.edu.cn/showproblem.php?pid=6112 [思路] 公式计算即可,注意特判2月29号 Zeller公式里,计算出的week不能直接模7,要保证week是正数 [A ...
- 弹飞绵羊(bzoj 2002)
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- [NOIP2003] 提高组 洛谷P1041 传染病控制
题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染病,难以准确判别病毒携带 ...
- msp430项目编程04
msp430中项目---TFT彩屏显示 1.TFT彩屏工作原理 2.电路原理说明 3.代码(静态显示) 4.代码(动态显示) 5.项目总结 msp430项目编程 msp430入门学习
- msp430入门编程17
msp430中C语言的寄存器操作 msp430入门学习 msp430入门编程