iOS开发 Swift 速记7:结构体和类
初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
源码指引:github源码指引_初级代码游戏的博客-CSDN博客
C#是我多年以来的业余爱好,新搞的东西能用C#的就用C#了。
系列入口:iOS开发 Swift 速记1:变量和基本数据类型-CSDN博客
怀疑看的资料不行,含混不清。
目录
一、结构体和类
二、属性
三、属性包装器
四、类属性和方法(静态属性和方法)
五、下标方法
六、构造方法
七、析构方法
八、继承
代码
一、结构体和类
struct 结构体 不能继承 除了类都是值类型
class 类 类是引用类型 比较用 ===
类属性必须有初值,要么直接指定,要么用构造函数init
类的实例即使是let一样能修改属性(为了摆脱指针引入了多少奇怪东西啊)
lazy var 延时构造(非线程安全 谁想出来的啊)
二、属性
存储属性 变量(常量)var 属性名:类型 = 初值 {willSet{语句} didSet{语句}}
监听器默认参数名newValue oldValue 可以用(新名字)来修改
初始化不会触发监听器
计算属性 var 属性名:类型{get{语句} set{语句}} set参数为newValue 可以没有set(即只读)
只读计算属性可以简写 var 属性名:类型{语句}
计算属性没有监听器
三、属性包装器
定义 @propertyWarpper struct 包装器名称{属性模板定义}
使用 @包装器名称 var 属性名:类型
四、类属性和方法(静态属性和方法)
static 通过 类名.属性和方法名 访问
普通类方法里self指自身实例,静态方法里指自身类
类 static func 不可被子类覆盖 class func 可以被子类覆盖
覆盖要加override
class的方法可以修改属性,struct的方法修改需要 mutating func
五、下标方法
subscript为下标方法([]不是运算符),类似计算方法
六、构造方法
init 不需要func,没有返回值
class 所有存储属性都有默认值时隐含生成无参init
struct 没有定义init时隐含生成以所有属性为参数的init
convenience init 便利构造方法,最终必须调用普通构造方法(指定构造方法,没有修饰的)
可失败构造方法 init? 根据需要返回nil
必要构造方法 required 子类必须实现
七、析构方法
deinit
八、继承
class 类名:基类名
super指代基类
代码
struct S
{var a:Intvar b:Int
}
class C
{var a:Int = 0 {willSet{print("newValue \(newValue)")}didSet{print("oldValue \(oldValue)")}}var b:Int = 0
}
let x = C()
print(x.a)
x.a += 1
print(x.a)
(这里是文档结束)