Swift 類(lèi)和對(duì)象 7.22
class Dog { //類(lèi)名的首字母要大寫(xiě)
//成員變量
var kind: String = "" //創(chuàng)建狗的品種
var weight: Double = 0.0 //創(chuàng)建狗的重量
func bite(name: String) { //假如狗會(huì)咬人
print("Bite",name)
}
}
//與結(jié)構(gòu)體struct的區(qū)別
//1.用let定義的結(jié)構(gòu)體變量,成員不能修改
//2.結(jié)構(gòu)體是值類(lèi)型,在賦值的時(shí)候會(huì)發(fā)生復(fù)制
//3.類(lèi)是引用類(lèi)型
//4.結(jié)構(gòu)的成員是方法需要加mutating才能修改成員變量
//類(lèi)calss的默認(rèn)構(gòu)造是沒(méi)有參數(shù)的
//構(gòu)造函數(shù)
init() {
}
//函數(shù)//方法
//當(dāng)一個(gè)類(lèi)沒(méi)有創(chuàng)建構(gòu)造函數(shù)(init)時(shí),編譯器自動(dòng)生成一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù),
//一旦創(chuàng)建自定義構(gòu)造函數(shù),編譯器將不會(huì)自動(dòng)生成構(gòu)造函數(shù)
let dog = Dog() //創(chuàng)建對(duì)象,在堆上分配空間
dog.kind = "吉娃娃"
dog.weight = 4
dog.bite("張三")
class Cat {
var kind: String = ""
var weight: Double = 0.0
var name: String = ""
func eat(food: Double) -> Double {
weight += food
return weight
}
class func Animal() -> Cat {
return Cat() }
}
let cat01 = Cat()
dog.kind = "波斯貓"
//析構(gòu)函數(shù) 從程序中刪除,從內(nèi)存中釋放掉
deinit() {
}
//strong/weak
//強(qiáng)引用/弱引用
//當(dāng)一個(gè)的強(qiáng)引用個(gè)數(shù)大于0是,對(duì)象就不會(huì)被銷(xiāo)毀!!!
//變量默認(rèn)的類(lèi)型都是strong類(lèi)型
//weak的應(yīng)用類(lèi)型一定是Optional類(lèi)型(隱含) Dog?
//weak僅僅是通過(guò)變量(引用)找到對(duì)象而已 (只是使用)
//strong強(qiáng)引用可以維持對(duì)象不被銷(xiāo)毀 (擁有)
var d1 = Dog()
var d2 = d1
let ani03 = Cat.Animal()
ani03.name = "Katty"
print(ani03.name)