swift-03-构造器(Designated&&Convenience)
init(parameters) {
statements
}
便利构造器的语法
convenience init(parameters) {
statements
}
便利构造器和指定构造器之间的规则
1.指定构造器必须调用其直接父类的指定构造器
2.便利构造器必须调用同一个类中定义的其他构造器
3.便利构造器必须最终以调用一个指定构造器结束。
4.指定构造器向上代理;
5.便利构造器横向代理
swift类的构造过程包含两个阶段:
1.每个存储型属性通过引入他们的类的构造器来设置初始值;
2.当每个存储型属性值被确定后,给每个类一次机会,在新实例准备使用之前进一步定制他们的存储型属性。
---可以有效地防止属性值在初始化之前被访问;也可以防止属性被另一个构造器意外地赋予不同的值。
安全检查1:
指定构造器必须保证它所在类引入的所有属性都必须先初始化完成,之后才能将其他构造任务向上代理给父类中的构造器。
一个对象的内存只有在其所有存储型属性确定后才能完全初始化。
安全检查2:
指定构造器必须向上代理调用父类构造器,然后再为继承的属性设置新值。如果没这么做,指定构造器赋予的新值,将被父类中的构造器所覆盖。
安全检查3:
便利构造器必须先代理调用同一类中的其他构造器,然后再为任意属性赋新值。如果没这么做,便利构造器赋予的新值将被同一类中的其他指定构造器所覆盖。
安全检查4:
构造器在第一阶段构造完成之前,不能调用任何实例方法,不能读取任何实例属性的值,self的值不能被引用。
类实例在第一阶段结束以前,并不是完全有效,仅能访问属性和调用方法,一旦完成第一阶段,该实例才会声明为有效实例。
写不下去了。这个文档真是差评,案例太少了。
swift-03-构造器(Designated&&Convenience)的更多相关文章
- 【iOS】swift init构造器
这几天在使用 Swift 重写原来的一个运动社交应用 SportJoin. 为什么要重写呢? 首先因为实在找不到设计师给我作图; 其次, 我也闲不下来, 想找一些项目做, 所以只好将原来的代码重写了. ...
- Swift中构造器的继承和重写
import Foundation /* 构造器的继承: Swift的子类不会自动继承父类的构造器, 若继承, 则满足如下规则: 1.如果子类没有提供任何指定构造器, 那么它将自动继承父类的所有指定构 ...
- Swift 类构造器的使用
Swift 中构造器需要遵循的规则还是很多的, 总结一下, 有以下规则: 调用相关 指定构造器必须调用它直接父类的指定构造器方法. 便利构造器必须调用同一个类中定义的其它初始化方法. 便利构造器在最后 ...
- Swift 03.Dictionary
字典 key它必须是可哈希的,也就是说,它必须能够提供一个方式让自己被唯一表示出来.Swift的所有基础类型(例如String.Int.Double和Bool)默认都是可哈希的,这些类型都能够用作字典 ...
- Swift - 03 - 整数类型
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- Java基础03 构造器与方法重载
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在方法与数据成员中,我们提到,Java中的对象在创建的时候会初始化(initial ...
- Java基础03 构造器与方法重载(转载)
显式初始化要求我们在写程序时就确定初始值,这有时很不方便.我们可以使用构造器(constructor)来初始化对象.构造器可以初始化数据成员,还可以规定特定的操作.这些操作会在创建对象时自动执行. 定 ...
- java Vamei快速教程03 构造器和方法重载
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在方法与数据成员中,我们提到,Java中的对象在创建的时候会初始化(initial ...
- Swift的 convenience && designated init
http://www.th7.cn/Program/IOS/201603/789227.shtml 在 OC 中 init 方法是非常不安全的,没人能够保证 init 只被调用一次,也没有人保证在初始 ...
随机推荐
- HDU 3966(树链剖分+点修改+点查询)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题目大意:营地的分布成树型.每个营地都有一些人,每次修改修改一条链上的所有营地的人数,每次查询单 ...
- HDU 4533 威威猫系列故事——晒被子
题目链接 扫描线可做,然后当时比赛后问虎哥,他说可以标记,然后拖了很久,今天从早上折腾到晚上,终于把两种情况写出来,分析太弱.改天扫描线,再来一次. 被子如果被y = x 穿过,可以分成两部分,上和下 ...
- hilbert
hilbert 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:131072KB: 代码长度限制:102400B 试题描述 图1为1阶Hilbert曲线,它由3条长度为1 ...
- jsoup httpclient 爬取网页并下载google图标
jsoup下载地址 http://www.jsoup.org httpclient下载地址 http://hc.apache.org/downloads.cgi 其他jar包见附件 Crawler p ...
- java编译自动化
java编译自动化 http://h2ofly.blog.51cto.com/6834926/1545452?utm_source=tuicool&utm_medium=referral
- PHP 单例模式代码片段
<?php error_reporting(E_ALL | E_STRICT); class single{ public $hash; static protected $ins = null ...
- 一个项目软件的大小基本都占用在外部引用的jar包上了。
1.一个项目几百兆,基本都是外部jar包,引用的. 2.自己本身业务代码并没有那么多的 3.看下meven的仓库大小就知道了,都几百兆
- eclipse不正常编译导致错误:Access denied for user 'root'@'localhost' (using password: YES)
使用eclipse连接mysql报错:Access denied for user 'root'@'localhost' (using password: YES) 连接代码没有任何问题,网上找了很多 ...
- MyCAT安装指南
MyCAT安装指南 MyCAT 1.2版本 快速上手-安装指南(安装单机) Mycat的server和mysql位于同一台服务器,centos6.2.4环境 Mycat:10.191.116.175 ...
- Scripting Languages
Computer Science An Overview _J. Glenn Brookshear _11th Edition A subset of the imperative programmi ...