類的定義
使用關(guān)鍵字class來定義,定義其內(nèi)容包含屬性和方法。
class Person{
var name:String = ""
var age:Int = 0
var sex:String = ""
func skill(){
print("哈牛逼")
}
}
實(shí)例化對象
let i = Person()
i.name="李白"
i.age=100
i.sex="男"
i.skill()
print(i.name)
print(i.age)
print(i.sex)
類是引用類型
let i2 = i //i2與i共用一個地址
i2.name = "趙子龍"
i2.age = 800
i2.sex = "男"
print(i.name)
print(i.age)
print(i.sex)
判斷是否引用了同一個實(shí)例
print(i2===i)
let i3 = Person()
print(i3===i)
存儲屬性
存儲屬性就是存儲特定的類的一個常量或者變量
class money{
//儲存屬性
var January:Double = 0.0
var February:Double = 0.0
}
let stu = money()
//調(diào)用儲存屬性
stu.January = 4000.6
stu.February = 6006.2
print(stu.January)
計算屬性
1.計算屬性不存儲值而是提供了一個get和set來分別進(jìn)行獲取值和設(shè)置其他屬性的值
2.get里必須要有return要不然執(zhí)行不起來
3.set中的newValue是用來接收外界賦給的新值
4.只讀計算屬性:只提供get,沒有set的,在寫get的時候可以把get連同{}一起省略
class money2{
//儲存屬性
var January:Double = 0.0
var February:Double = 0.0
//計算屬性
var averagemoney:Double{
//get:獲取值
get{
return (January+February)/2
}
//set:賦值
set{
print("set被調(diào)用,\(newValue)")
}
}
}
let stu2 = money2()
stu2.January = 4000.6
stu2.February = 6006.2
//使用計算屬性
print(stu2.averagemoney)
stu2.averagemoney = 66
只讀計算屬性
class money3{
//儲存屬性
var January:Double = 0.0
var February:Double = 0.0
//只讀計算屬性單一個get
var averagemoney2:Double{
get{
print("嘿")
return (January+February)*2
}
}
//只讀計算屬性可以省略get{}
var averagemoney3:Double{
print("hello")
return (January+February)*2
}
}
//只讀計算屬性
let stu3 = money3()
stu3.January = 4000.6
stu3.February = 6006.2
print(stu3.averagemoney2)
print(stu3.averagemoney3)
類屬性
1.類屬性與個體無關(guān),不需要對類進(jìn)行實(shí)例化就可以使用。
2.類屬性使用關(guān)鍵字static
class money4{
//儲存屬性
var January:Double = 0.0
var February:Double = 0.0
//類屬性
static var amount:Int = 88
}
//使用類屬性
print(money4.amount)
懶儲存屬性
1.懶加載只會賦值一次,只有在第一次使用的時候,
才會執(zhí)行閉包,然后把閉包返回值賦值給屬性
2.懶加載通過在屬性聲明的前面加上lazy來標(biāo)識
懶加載的使用方法:
lazy var 變量:類型 = {代碼段}()
案例
class number{
var start:Int = 0
var end:Int = 999
lazy var count:Int = {
()->Int in
print("開始計算")
var num = 0
for i in self.start...self.end{
num = num+i
}
return num
}()
}
let range = number()
print(range.count)//只有第一次調(diào)用的時候執(zhí)行閉包
print(range.count)
print(range.count)
懶加載的使用場景
class Location{
let latitude:Double
let longitude:Double
init(latitude:Double,longitude:Double){
self.latitude = latitude
self.longitude = longitude
}
lazy var address:String = {
return "xxxx"
}()
}
屬性觀察器
1.屬性觀察器可以用來監(jiān)控和響應(yīng)初始化的屬性值變化
2.屬性觀察器包括willSet和didSet,其中屬性值改變前會觸發(fā)willSet,屬性值改變后會觸發(fā)didSet
屬性觀察器的特點(diǎn):
1.給屬性添加觀察器必須要聲明清楚屬性類型,否則會報錯
2.willSet可以帶一個newName的參數(shù),沒有的話,該參數(shù)默認(rèn)命名為newValue
3.didSet可以帶一個oldName的參數(shù),表示以前的屬性,不帶的話默認(rèn)為oldValue
4.即使是設(shè)置的值和原來的值相同,willSet和didSet也會被調(diào)用
class Person{
//儲存屬性
var January:Double = 0.0
var February:Double = 0.0
var name:String = "lisi"{
willSet{
print("在willSet被使用的時候值是,\(newValue)")
}
didSet{
print("在didSet被使用時值是,\(oldValue)")
}
}
}
let stu = Person()
stu.name = "小花"
屬性觀察器的使用場景
class Machine{
let max = 30 //允許通過的最大電流
var current = 10 {
willSet{
if newValue < max{
print("正常賦值")
}
if newValue == max{
print("安全提示:當(dāng)前達(dá)到了規(guī)定的最大電流。")
}
}
didSet{
if current > max{
print("安全提示:當(dāng)前電流已經(jīng)超過了最大電流不可通過,回到當(dāng)初電流。")
current = oldValue
}
}
}
}
var p = Machine()
p.current = 20
p.current = 30
p.current = 100
print(p.current)