1、结构体(小的类就是用struct来写)
struct arrow{ var x=0,y=0 }
2、类(常用)
class a{ var a=10 var b=20 } var b=a() //实例化 print(b.a) //10
3、类(class)与结构体(struct)的简易不同
(1)class 不能直接用 x(a:1) ,必需要定义一個 constructor
struct SRectangle { var width = 200 } var sRect = SRectangle() //实例化 sRect = SRectangle(300) //设置里面的值,class这样的话就会报错 print(sRect.width) //300
(2)class共用赋值地址,struct赋值地址分开
1、struct
var sRect = SRectangle() var sRect2 = sRect sRect2.width // 目前值是 200,因為 sRect 直接 copy 一份完整記憶體給 sRect2 sRect2.width = 500 sRect.width // sRect.width 值不受 sRect2 影響還是 200
2、class
var cRect = CRectangle() var cRect2 = cRect cRect2.width // 目前值是 200,因為 sRect 直接 copy 一份完整記憶體給 sRect2 cRect2.width = 500 cRect.width // cRect.width 也改變成了 500
4、计算属性中的getter(描述属性如何计算及返回语句)
struct data{ let name="a" var money=0 } class random { var my=data() var state="carry" var work:data{ //继承data的类型 get{ //不可忽略 switch state{ case "carry": my.money+=1000 default: my.money+=200 } return my } } } var HI=random() print(HI.my.money) //0 print(HI.work.money) //1000 HI.state="" print(HI.work.money) //1200
5、计算属性中的setter(有新值(newValue)后如何影响其他的值)
struct data{ var name="a" var money=0 } class random { var my=data() var work:data{ get{ //不可忽略 return my } set{ my=newValue } } } var HI=random() HI.work=data(name:"hi",money:500) print(HI.my.money) //500
6、属性监视器,事前响应(willSet),时候响应(didSet)
class money{ var tatal=0{ willSet{ print("当前(newValue)") //本身有变量newValue } didSet{ print("增加(tatal-oldValue)") //本身有变量oldValue } } } var money1=money() money1.tatal=1000 //当前1000 增加1000 money1.tatal=4000 //当前4000 增加3000