假设你为你子类引入的任何新的属性都提供了默认值,请遵守以下2个规则:
规则1
如果你的子类没有定义任何指定初始化器,它会自动继承父类所有的指定初始化器。
规则2
如果你的子类提供了所有父类指定初始化器的实现——要么是通过规则1继承来的,要么通过在定义中提供自定义实现的——那么它自动继承所有的父类便捷初始化器。
就算你的子类添加了更多的便捷初始化器,这些规则仍然适用。
注意
子类能够以便捷初始化器的形式实现父类指定初始化器来作为满足规则2的一部分。
swift 引用类型判读是否相等用 === 判断
如:
class persion
var persion1 = persion
persion1 === persion
继承: 子类可以使用父类的方法和属性,final 修饰的类不能再被继承
static let shareInstanc = DOwnMangaer()
private init( ){
}
open public internal fileprivate private
lazy property 懒加载属性,保证属性值只被计算一次就保存下来,计算属性每次调用都会重新计算
var address: String{
return ""
}
lazy var myAddress: String = {
return "\(self.latitude)" + "\(langtitude)"
}()
var width: Int{
set{
}
get{
return latitude - langtitude
}
}
属性观察器: didSet{} willSet{}
静态方法又叫类型方法 方法前面添加 static 关键字就可以
类是引用类型传递,结构体是值传递类型,类可以被继承,结构体是更轻量级的,存储在系统的栈里面,类存储在系统的堆里面。
结构体适合描述存储值的对象。rect point
类适合描述对象 人 车
计算属性默认是只有getter方法的,可以重写setter getter,是通过存储属性计算得来的,类和结构体都有这两种属性。长方形的size 和 origin都是存储属性,center是计算属性
给属性添加static关键字就成了类型属性,被类持有,生命周期跟应用程序一样长
引用类型是指向,改变自身是允许的,结构体和枚举 值类型是拷贝,改变自身需要mutating 特殊处理
结构体是值类型,赋值就是开辟新的内存,并拷贝值为副本。 类是引用类型,赋值即两个指针指向同一块内存区域
结构体的创建。初始化()的时候会自动提示,结构体的常变量使用,结构体相比于类,类要更负责功能更强大一些
枚举:是一种新的 数据类型,不是整型不是字符串。枚举能够穷举
enum Direction{
case NORTH,SOUTH,EAST,WEST
}
func showDirection(direction:Direction) -> String{
switch direction {
case .NORTH:
return "北京"
case .SOUTH:
return "南家"
case .EAST:
return "动静"
case .WEST:
return "西苑"
}
}
showDirection(direction: .SOUTH)
子类中 如果实现了父类的所有指定构造函数,那么子类自动将父类的便利构造函数继承
结构体 struct 枚举 enum int ....是值类型:相当于深拷贝,拷贝的不仅仅是对象本身还有地址。
class ,闭包 block 是引用类型:相当于浅拷贝,拷贝的是指针