Swift学习笔记-结构体和类

xiaoxiao2022-06-11  85

结构体

结构体由属性和方法构成,其中属性可以是变量或者常量,可以在定义的时候给出属性的默认值

struct Worker{ //身高 var height=170 //颜色 var color="yellow" }

和枚举类型一样,结构体也是值类型,所以修改属性的方法也要标记为mutating

struct Worker{ //身高 var height=170 //颜色 var color="yellow" func printSelf() { print("My Height is \(height),My Color is \(color)") } mutating func setColor(newColor:String) { color=newColor } }

类型方法可以通过static实现, 类型方法是类型本身调用的方法,而不是实例调用的方法

struct Worker{ //身高 var height=170 //颜色 var color="yellow" static func getNumberOfWorker() -> Int { return 5 } }

创建结构体实例时,可以使用默认值创建,也可以使用自定义的一组值

var worker=Worker() var worker2=Worker(height:180,color:"red") worker.printSelf() worker.setColor(newColor: "black") worker.printSelf()

类和结构体类似,但是结构体为值类型,类为引用类型,结构体不支持继承,类支持

class Person{ //身高 var height=170 //颜色 var color="yellow" } //继承于Person类 class Worker:Person{ //工龄 var workYears=10 //工作 var job="医生" }

使用override重写父类方法,使用super调用父类方法

class Person{ //身高 var height=170 //颜色 var color="yellow" func printSelf(){ print("my height is \(height),my color is \(color)") } } class Worker:Person{ //工龄 var workYears=10 //工作 var job="医生" override func printSelf() { print("my job is \(job),my workYears is \(workYears)") super.printSelf() } }

使用final可以禁止子类重写该方法

class Person{ //身高 var height=170 //颜色 var color="yellow" final func printSelf(){ print("my height is \(height),my color is \(color)") } }

在类里,类型方法可以通过标记class实现,如果不想让子类重写可以使用static代替class

class Worker:Person{ //工龄 var workYears=10 //工作 var job="医生" class func getParentClassName() -> String{ return "Person" } }

mutating方法的本质

在成员方法中都有一个默认的参数self,在方法中访问或者修改成员变量时,都是通过self来实现的,由于值类型在传递参数时会被复制,所以值类型方法中修改成员变量时,修改的其实是值的副本,而mutating的作用是把self以inout的形式传进来

转载请注明原文地址: https://www.6miu.com/read-4932166.html

最新回复(0)