Swift回忆录-构造器
来源:互联网 发布:java sftp客户端 编辑:程序博客网 时间:2024/05/21 22:34
Swift回忆录-构造器
构造器
构造器在创建某个特定类型的新实例时被调用。它的最简形式类似于一个不带任何参数的实例方法,以关键字init命名
init() { // 在此处执行构造过程 }
结构体构造过程
构造参数
struct Person { var age:Int var name:String = "LouKit" //默认属性值 init(fromMan pAge:Int) { age = pAge + 1; } init(fromWomen pAge:Int) { age = pAge + 2; } } let mAge = Person(fromMan:80) let wAge = Person(fromWomen:80) print("\(mAge.age)--\(wAge.age)-")//81 82
参数的内部名称和外部名称
struct Color { let red, green, blue: Double init(red: Double, green: Double, blue: Double) { self.red = red self.green = green self.blue = blue } init(white: Double) { red = white green = white blue = white } } let magenta = Color(red: 1.0, green: 0.0, blue: 1.0) let halfGray = Color(white: 0.5)
不带外部名的构造器参数
struct Color { let red, green, blue: Double init(red: Double, green: Double, blue: Double) { self.red = red self.green = green self.blue = blue } init(white: Double) { red = white green = white blue = white } } let magenta = Color(red: 1.0, green: 0.0, blue: 1.0) let halfGray = Color(white: 0.5)
结构体拥有逐一成员构造器
struct Size { var width = 0.0, height = 0.0 } let twoByTwo = Size(width: 2.0, height: 2.0)
类的继承和构造过程
Swift 编译器将执行 4 种有效的安全检查,以确保两段式构造过程能不出错地完成:
安全检查 1
指定构造器必须保证它所在类引入的所有属性都必须先初始化完成,之后才能将其它构造任务向上代理给父类中的构造器。
如上所述,一个对象的内存只有在其所有存储型属性确定之后才能完全初始化。为了满足这一规则,指定构造器必须保证它所在类引入的属性在它往上代理之前先完成初始化。
安全检查 2
指定构造器必须先向上代理调用父类构造器,然后再为继承的属性设置新值。如果没这么做,指定构造器赋予的新值将被父类中的构造器所覆盖。
安全检查 3
便利构造器必须先代理调用同一类中的其它构造器,然后再为任意属性赋新值。如果没这么做,便利构造器赋予的新值将被同一类中其它指定构造器所覆盖。
安全检查 4
构造器在第一阶段构造完成之前,不能调用任何实例方法,不能读取任何实例属性的值,不能引用self作为一个值。
类实例在第一阶段结束以前并不是完全有效的。只有第一阶段完成后,该实例才会成为有效实例,才能访问属性和调用方法。
总结: 先全部初始化好自己的属性,然后才能调用父类的构造器;便利构造器只能调用同一类的指定构造器
构造器的自动继承
假设你为子类中引入的所有新属性都提供了默认值,以下 2 个规则适用:
规则 1
如果子类没有定义任何指定构造器,它将自动继承所有父类的指定构造器。
规则 2
如果子类提供了所有父类指定构造器的实现——无论是通过规则 1 继承过来的,还是提供了自定义实现——它将自动继承所有父类的便利构造器.(子类可以将父类的指定构造器实现为便利构造器)
类型转换
is
用类型检查操作符(is)来检查一个实例是否属于特定子类型。若实例属于那个子类型,类型检查操作符返回 true,否则返回 false。
向下转型 as?/as!
转型有可能失败时选用as?,如果失败就是为nil
如果能保证一定能转型成功as!,但如果失败程序直接报运行时错
Any 和 AnyObject 的类型转换
Any 可以表示任何类型,包括函数类型。
AnyObject 可以表示任何类类型的实例。
- Swift回忆录-构造器
- Swift回忆录-枚举
- Swift回忆录-属性
- Swift回忆录-闭包
- Swift 构造器探究
- swift 构造器
- swift 构造器
- Swift ☞ 对比学习Swift构造器
- Swift入门教程14-构造器
- 【iOS】swift init构造器
- [Swift学习之一]构造器
- swift的默认构造器
- Swift回忆录下标——subscript
- C++ 回忆录5 对象的构造方法
- 回忆录
- 回忆录
- 回忆录
- 回忆录
- 执行 hive sql ,报错:断开的管道
- Kettle 数据库连接采用文本文件进行配置
- 手机相机和相册:基本调用与剪切相片
- android startActivityForResult和setResult详情及Demo
- How to Install Metasploit on Linux Ubuntu
- Swift回忆录-构造器
- Python scrapy基础教程(一)
- android 从资源角度谈Android代码内存优化
- 使用CppSQLite3封装结合wxSQLite实现加密版的SQLite数据库操作类
- 以一个wav文件为实例分析wav文件格式
- MySQL技术内幕:InnoDB存储引擎读书笔记(下)
- android ListView中的convertView缓存及使用
- mapreduce的组成
- android LruCache内存缓存学习(重写sizeOf方法)