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(width: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