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

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

     当你为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的。不会触发不论什么属性观測器(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. POJ 2976 Dropping test(01分数规划模板)

    01分数划分详情可阅读:http://www.cnblogs.com/perseawe/archive/2012/05/03/01fsgh.html 题意: 给出n个a和b,让选出n-k个使得最大 二 ...

  2. 大数据学习——mapreduce共同好友

    数据 commonfriends.txt A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A,C,D ...

  3. php面向对象(设计模式 工厂模式)

    //设计模式//单例模式//类的计划生育//让该类在外界无法造成对象//让外界可以造一个对象,做一个静态方法返回对象//在累里面可以通过静态变量控制返回对象只能有一个 //class Cat//{// ...

  4. Android ShapeDrawable之OvalShape、RectShape、PaintDrawable、ArcShape

     Android ShapeDrawable之OvalShape.RectShape.PaintDrawable.ArcShape Android图形图像基础之OvalShape.RectShap ...

  5. [NOIP1999] 提高组 洛谷P1016 旅行家的预算

    题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  6. 新建一个基于vue.js+Mint UI的项目

    上篇文章里面讲到如何新建一个基于vue,js的项目(详细文章请戳用Vue创建一个新的项目). 该项目如果需要组件等都需要自己去写,今天就学习一下如何新建一个基于vue.js+Mint UI的项目,直接 ...

  7. msp430项目编程06

    msp430中项目---设计扫描键盘 1.扫描键盘工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(键盘驱动) 5.项目总结 msp430项目编程 msp430入门学习

  8. The Doors--poj1556(最短路+判断点与线段的关系)

    http://poj.org/problem?id=1556 题目大意:从(0,5)走到(10,5)走的最短距离是多少 中间有最多18个隔着的墙  每个墙都有两个门  你只能从门通过 我的思路是  只 ...

  9. Java描述符(修饰符)的类型

    以下内容引用自http://wiki.jikexueyuan.com/project/java/modifier-types.html: 描述符(修饰符)是添加到那些定义中来改变他们的意思的关键词.J ...

  10. html页面中拍照和上传照片那些事儿(一)

    本文为原创,转载请注明出处: cnzt  文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6709037.html  一. 思路: <input type= ...