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 前面第三和第四节我们一直在强调一句话,类 ...
随机推荐
- java源码之LinkedHashMap
先盗两张图感受一下(来自:https://blog.csdn.net/justloveyou_/article/details/71713781) HashMap和双向链表的密切配合和分工合作造就了L ...
- 创业笔记-Node.js入门之阻塞与非阻塞
阻塞与非阻塞 正如此前所提到的,当在请求处理程序中包括非阻塞操作时就会出问题.但是,在说这之前,我们先来看看什么是阻塞操作. 我不想去解释“阻塞”和“非阻塞”的具体含义,我们直接来看,当在请求处理程序 ...
- Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
我们知道有不少开源project,能实现非常多不错的效果.前几天,我看了一个效果,刚好项目中也用到了这个jar包. 没事挖一挖 学一学(一说到挖一挖.那么问题来了.挖掘机技术究竟哪家强 ),看看不错的 ...
- Android recycleView的研究和探讨
RecyclerViewLibrary A RecyclerView libirary ,has some support, like headerAdapter/TreeAdapter,and Pu ...
- QStandardItemModel的data线程安全(在插入数据时,临时禁止sizeHint去读model中的data)
版权声明:本文为博主原创文章,欢迎转载,转载请注明出处 https://blog.csdn.net/MatchYang/article/details/52988257 在直接使用QStandardI ...
- ubuntu 交叉编译qt 5.7 程序到 arm 开发板
ubuntu 交叉编译qt 5.7 程序到 arm 开发板平台1 ubuntu 12.042 arm-linux-gcc 4.5.13 QT 5.74 开发板210 armcortex-A8 一 概述 ...
- 如何使用scss/sass
SCSS 与 Sass 异同:http://sass.bootcss.com/docs/scss-for-sass-users/: 欢迎加入前端交流群来py: 转载请标明出处! 废话不多说,直接进入正 ...
- POJ 1945 暴搜+打表 (Or 暴搜+判重)
思路: 呃呃 暴搜+打表 暴搜的程序::稳稳的TLE+MLE (但是我们可以用来打表) 然后我们就可以打表过了 hiahiahia 可以证明最小的那个数不会超过200(怎么证明的我也不知道),然后就直 ...
- c#邮件发送服务
邮件发送服务 项目中会遇到定时给某人发送邮件的功能要求,这里是京东的一段代码,当然也是我同事找的,我记录学习一下,以免忘记. 这是解决方案 这里主要是工具:日志工具,链接数据库工具,发送邮件工具 这里 ...
- C++之虚函数表
本文引自:http://songlee24.github.io/blog/2014/09/02/c-plus-plus-jin-jie-zhi-xu-han-shu-biao/ C++通过继承(inh ...