Swift学习笔记-结构体和类
2018-10-23 本文已影响1人
土豆吞噬者
结构体
结构体由属性和方法构成,其中属性可以是变量或者常量,可以在定义的时候给出属性的默认值
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的形式传进来