类和结构体在实例创建时,必须为全部存储型属性设置合适的初始值。

存储型属性的值不能处于一个未知的状态。
     你能够在构造器中为存储型属性赋初值,也能够在定义属性时为其设置默认值。下面章节将具体介绍这两种方法。
注意:

     当你为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的。不会触发不论什么属性观測器(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)的更多相关文章

  1. Swift学习笔记十四

    Deinitialization 当类的实例对象即将要被释放时,会立即调用deinitializer,通过deinit关键字来定义deinitializer,和initializer一样,它也只存在于 ...

  2. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  3. (C/C++学习笔记) 十五. 构造数据类型

    十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...

  4. (C/C++学习笔记) 十四. 动态分配

    十四. 动态分配 ● C语言实现动态数组 C语言实现动态数组,克服静态数组大小固定的缺陷 C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量.一旦定义了一个数组,系统将为它分配一个 ...

  5. swift 笔记 (十四) —— 构造过程

    构造过程 为了生成类.结构体.枚举等的实例,而做的准备过程,叫做构造过程. 为了这个过程,我们一般会定义一个方法来完毕,这种方法叫做构造器.当然它的逆过程,叫做析构器,用于在实例被释放前做一些清理工作 ...

  6. Swift 学习笔记(四)

    116.使用可选链式调用代替强制展开 通过在想调用的属性.方法.或下标的可选值(optional value)后面放一个问号(?),可以定义一个可选链.这一点很像在可选值后面放一个叹号(!)来强制展开 ...

  7. Swift学习笔记十六:协议

    Protocol(协议)用于统一方法和属性的名称,而不实现不论什么功能. 协议可以被类.枚举.结构体实现.满足协议要求的类,枚举,结构体被称为协议的遵循者. 遵循者须要提供协议指定的成员,如属性,方法 ...

  8. 【swift学习笔记】四.swift使用Alamofire和swiftyJson

    Alamofire是AFNetworking的swift版本,功能灰常强大. github:https://github.com/Alamofire/Alamofire SwiftyJSON是操作js ...

  9. SharpGL学习笔记(十四) 材质:十二个材质球

    材质颜色 OpenGL用材料对光的红.绿.蓝三原色的反射率来近似定义材料的颜色.象光源一样,材料颜色也分成环境.漫反射和镜面反射成分,它们决定了材料对环境光.漫反射光和镜面反射光的反射程度.在进行光照 ...

随机推荐

  1. 【URAL 1486】Equal Squares(二维哈希+二分)

    Description During a discussion of problems at the Petrozavodsk Training Camp, Vova and Sasha argued ...

  2. 【转】Entity Framework6 with Oracle(可实现code first)

    Oracle 已在2014年底提供对EF6的支持.以前只支持到EF5.EF6有很多有用的功能 值得升级.这里介绍下如何支持Oracle   一.Oracle 对.net支持的一些基础知识了解介绍. 1 ...

  3. zoj 1383 Binary Numbers

    Binary Numbers Time Limit: 2 Seconds      Memory Limit: 65536 KB Given a positive integer n, print o ...

  4. Archiving not possible: No primary destinations errors

    If space ran out in an archive destination, after you fix the problem, you may still recieve the fol ...

  5. dfs树上的边

    by   GeneralLiu 一 开 始 学 tarjan 的 强连通分量 , 割边 , 割点 时 没有 学扎实 经过培训 ,发现了些 需要注意的 小细节 举个荔枝 dfs树 上的 边 学了 tar ...

  6. 【枚举】Southwestern Europe Regional Contest H - Sheldon Numbers

    https://vjudge.net/contest/174235#problem/H [题意] 求[x,y]之间有多少个Sheldon Number Sheldon Number是二进制满足以下条件 ...

  7. poj 3155 二分+最小割求实型最小割(最大密集子图)

    /* 最大密集子图子图裸题 解法:设源点s和汇点t 根据胡波涛的<最小割模型在信息学中的应用> s-每个点,权值为原边权和m, 每个点-t,权值为m+2*g-degree[i], 原来的边 ...

  8. SpringBoot 配置 @PropertySource、@ImportResource、@Bean

    一.@PropertySource @PropertySource:加载指定的配置文件 @PropertySource(value = {"classpath:person.properti ...

  9. [NOIP2002] 提高组 洛谷P1034 矩形覆盖

    题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...

  10. IText 生成pdf,处理table cell列跨页缺失的问题

    /**     * 创建(table)PDF,处理cell 跨页处理     * @param savePath(需要保存的pdf路径)     * @param pmbs (数据库查询的数据)    ...