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