swift学习笔记(五)构造过程
构造过程是为了使用某个类、结构体或枚举类型的实例而进行的准备过程。在构造过程中,对每一个属性进行了初始值预设和其它必要的准备和初始化工作。
与OC相比,swift的构造函数。不须要返回值。同一时候,在类和结构体的构造过程中,必须对全部的存储类型属性,包括继承自父类的属性。赋予合适的初始值。存储类型值不能处于一个未知状态。
在对属性进行初始化过程中,有两种方法,第一:使用构造方法,第二:在定义属性时,直接赋予默认值。
当使用构造方法对属性赋值时,不会触发不论什么的属性观測器。
当一个属性总是使用同一个初始值时。能够通过默认值的形式进行赋值。这样能够使构造器更加简洁,同一时候也能够自己主动导出属性的类型。
在构造函数中,是能够对常量属性进行改动的。原则:仅仅要在构造函数结束前,常量值能够确定,就能够在构造函数中随意时间点,对常量进行改动。
能够在构造器中加入參数,參数的数量和类型能够依据详细须要而定。但在每一个制定构造器中,都必须对全部属性进行赋值。
当一个类型有多个制定构造器时,主要通过參数名和类型来确定须要调用的构造器。
所以构造器的外部參数名显得尤为重要。
跟普通函数一样,系统会自己主动为每一个构造器的參数自己主动生成一个跟内部名字同样的外部參数名称。就相当于在构造函数前加入了一个“#”。
假设要去掉这样的默认结构。能够使用“_”来定义自己喜欢的外部參数名。
注意:在调用构造函数时,必需要通过外部參数名称。否则在编译器会报错。
假设一个属性能够为空时。在定义时,能够将其声明为可选属性类型
如:var string:String?
关于默认构造器:
当结构、枚举、类型中的全部属性都已经提供默认值并且自身没有提供不论什么构造函数时,系统会自己主动生成一个构造器。构造器中的全部属性的值都为默认值。
关于指定构造函数和便利构造函数
为了保证类中的全部存储属性,包括继承自父类的属性都有初始值。
swift提供了两种构造函数:指定构造函数和便利构造函数。
每一个类都必须拥有至少一个制定构造器,在init前加入convenience keyword。就可以声明为便利构造函数。
指定构造函数和便利构造函数之间的调用关系。必须遵循下面三种规则:
1.指定构造函数必须调用其直接父类的构造器。即super.init()
2.便利构造函数必须调用同一类中定义的其它构造器。包括制定构造器和便利构造器。
3.便利构造器终于必须以调用一个制定构造器结束。
总结例如以下:制定构造器是向上代理。便利构造器是横向代理。
关于继承和重载;
在子类中。是不会自己主动继承父类的构造器的,须要手动调用,即super。init
重载构造器函数时。不用写overridekeyword
当要为子类引入随意新属性提供默认值时,须遵循下面两条规则:
1.当子类中没有不论什么指定构造器,子类将自己主动继承全部父类的制定构造器。
2.假设子类提供了全部父类制定构造器的实现。无论是通过规则1实现的。还是通过自己定义实现的,它将自己主动继承全部父类的便利构造器。
swift学习笔记(五)构造过程的更多相关文章
- swift学习笔记之-构造过程
//构造过程 import UIKit /* 构造过程(Initialization): 1.构造过程是使用类.结构体或枚举类型的一个实例的准备过程.在新实例可用前必须执行这个过程,具体操作包括设置实 ...
- swift学习笔记之-析构过程
//析构过程deist import UIKit /*析构过程(Deinitialization):析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用.析构器用关键字deinit来标示 ...
- Swift学习笔记五
基础运算符 Swift的大部分运算符和C及OC相同,也分一元二元多元的,这里只记录一些Swift特有的性质或写法. 赋值运算符( = ) 在等号右边是一个有多个值的元组时,它的成员值可以分解并同时分别 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Linux学习笔记(五) 账号管理
1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
随机推荐
- StringUtils 的填充方法
注意:两个参数的用空格填充,三个参数的用后面的参数填充 第一个参数要填充的字符串,第二个是需要的长度,第三个是以什么填充. 左侧填充: leftPad(): StringUtils.leftPad(S ...
- Spring的ApplicationContextAware接口的作用
ApplicationContextAware接口: 当一个类实现了这个接口之后,这个类就可以方便地获得 ApplicationContext 中的所有bean.换句话说,就是这个类可以直接获取Spr ...
- java有参无参构造器的的执行顺序
这里拿了用数组构造栈的一段代码说明一下 public class StackArray<E> { private Object[] data = null; private int max ...
- nginx編譯
openssl源码安装后,编译nginx-1.9.7或者openresty找不到OpenSSL的解决办法 http://blog.csdn.net/zhiyuan_2007/article/detai ...
- 洛谷 P2949 [USACO09OPEN]工作调度Work Scheduling
P2949 [USACO09OPEN]工作调度Work Scheduling 题目描述 Farmer John has so very many jobs to do! In order to run ...
- 【转载】黑客内核:编写属于你的第一个Linux内核模块
黑客内核:编写属于你的第一个Linux内核模块
- MyEclipse2014高速配置Spring & Spring Testing, Spring AOP简单使用
1.新建项目 2.右击项目,如图,利用myeclipse自己主动导入spring 3.在弹出的对话框中一直next到最后,在最后的页面中勾选Spring Testing,完毕. watermark/2 ...
- phonegap(cordova) 自己定义插件代码篇(六)----android ,iOS 微信支付工具整合
还是那句话,在使用插件代码篇的时候,请先了解插件机制(如整合原生插件先阅读原生插件文档.非常重要.非常重要!非常重要!),如未了解,请先阅读入门篇.这里就专贴关键代码 必须先把官方sdk 依照要求一步 ...
- .Net MVC的学习(一)
套种间作,也挺有意思的--近来学习感悟.DRP学习的同一时候,折腾了点曾经不曾学习可是却非常多次耳闻过的东西--Asp.Net中的MVC架构模式. 一.是什么? MVC,即(Model-View-Co ...
- 对Shell几个冷知识的总结(IFS,数组,替换,分割,查找)
IFS: 对IFS的用处直接进行说明,详细IFS是干什么的...自行谷歌 首先创建一个 "a a",和"a"的文件: 然后我们 ls查看一下: --> l ...