1.結(jié)構(gòu)體: swift中的結(jié)構(gòu)體和類非常相似,也就是結(jié)構(gòu)體能實(shí)現(xiàn)類的全部操作(功能)
結(jié)構(gòu)體是值類型,類是引用類型
結(jié)構(gòu)體是不能繼承的,但類可以繼承
2.swift的面向?qū)ο笪鍌€(gè)要素:枚舉出嘹、結(jié)構(gòu)體段只、類、協(xié)議狸棍、擴(kuò)展
3.面向?qū)ο蟮乃枷耄和瓿梢患虑樾枰鄠€(gè)對(duì)象協(xié)同工作
用對(duì)象來編程
//面向過程:講究的是步驟身害,整個(gè)過程我們屬于執(zhí)行者,是數(shù)學(xué)邏輯的映射
//面向?qū)ο螅褐v究的是對(duì)象草戈,完成一件事情需要多個(gè)對(duì)象參與塌鸯,是生活的映射
4.具有相同屬性和行為的一類事物的統(tǒng)稱稱為類
一類事物中的某一個(gè)個(gè)體被稱為對(duì)象
- //<1>將各種類型的對(duì)象或?qū)嵗橄蟪深愋停ò杜e、結(jié)構(gòu)體唐片、類)
//<2>可以使用類型定義出多個(gè)實(shí)例或者對(duì)象
//<3>讓所有的實(shí)例或者對(duì)象參與運(yùn)算
//使用結(jié)構(gòu)體實(shí)現(xiàn)多個(gè)對(duì)象完成同一件事情
6.結(jié)構(gòu)體與類的區(qū)別
//1.結(jié)構(gòu)體的成員變量不要求初始化
//2.結(jié)構(gòu)體提供了默認(rèn)的逐一構(gòu)造器為成員變量逐一復(fù)制
//3.結(jié)構(gòu)體中的實(shí)例方法不能修改結(jié)構(gòu)體中的成員變量
//4.如果結(jié)構(gòu)體中的成員變量賦初值編譯器會(huì)自動(dòng)生成一個(gè)不帶參數(shù)的構(gòu)造器,原有的逐一構(gòu)造器還可以繼續(xù)使用
7.結(jié)構(gòu)體使用注意事項(xiàng)
(1)通過實(shí)例或?qū)ο笳{(diào)用的方法為實(shí)例方法
(2)類方法只能通過類型名稱(結(jié)構(gòu)體類型名/類名)調(diào)用
(3)static或者class(3.0后只能在類中使用)修飾的函數(shù)稱其為類方法, class修飾函數(shù)只能在類中使用
(4)結(jié)構(gòu)體的實(shí)例方法可以直接訪問結(jié)構(gòu)體的成員變量
(5)結(jié)構(gòu)體的類方法默認(rèn)不能訪問結(jié)構(gòu)體內(nèi)的成員變量
(6)實(shí)例方法可以直接調(diào)用其它的實(shí)例方法調(diào)用類方法可以直接使用類名調(diào)用
(7)類方法中可以直接調(diào)用其它類方法丙猬,不能直接調(diào)用實(shí)例方法
8.自定義構(gòu)造器(類和結(jié)構(gòu)體都可用)
(1)無參的構(gòu)造方法: 如果自定義的構(gòu)造方法和系統(tǒng)提供的構(gòu)造方法同名系統(tǒng)的構(gòu)造方法被替代
(2)? 定義帶參的構(gòu)造方法:誰調(diào)用該方法涨颜,self關(guān)鍵字就相當(dāng)于誰
struct Student {
var name: String
var age: Int
let num: Int
mutating func writeCoder() {
name = "helloworld"
print("我是一個(gè)快樂的小碼農(nóng)")
}
func shopping() {
print("\(name)我是一個(gè)購物狂")
//【4】結(jié)構(gòu)體的實(shí)例方法可以直接訪問結(jié)構(gòu)體的成員變量
}
func working() {
print("工作")
shopping()
Student.sleep()
//【6】實(shí)例方法可以直接調(diào)用其他的實(shí)例方法 調(diào)用類方法可以直接使用類名調(diào)用
}
//【3】static或者class修飾的函數(shù) 稱其為類方法 class修飾函數(shù)只能類中使用
static func sleep() {
print("睡神")
//【5】結(jié)構(gòu)體的類方法默認(rèn)不能訪問結(jié)構(gòu)體內(nèi)的成員變量
eat()
//【7】類方法中可以直接調(diào)用其他類方法 不能直接調(diào)用實(shí)例方法
}
static func eat() {
print("吃吃吃")
}
}
var stu = Student(name: "小明", age: 12, num: 1001)
print(stu.name,stu.age,stu.num)
//【1】通過實(shí)例或者對(duì)象調(diào)用的方法為實(shí)例方法
stu.shopping()
stu.writeCoder()
//【2】類方法只能通過類型名稱(結(jié)構(gòu)體類型名/類名)調(diào)用
Student.sleep()
struct Size {
var width: Int = 100
var height: Int = 200
func getArea() {
print(width * height)
}
}
var s = Size()
s.getArea()
var s1 = Size(width: 10, height: 20)
s1.getArea()
//自定義構(gòu)造器
struct Triangle {
var aLength: Int
var bLength: Int
var cLength: Int
//無參的構(gòu)造方法 如果自定義的構(gòu)造方法和系統(tǒng)提供的構(gòu)造方法同名 系統(tǒng)的構(gòu)造方法被替代
init() {
aLength = 30
bLength = 40
cLength = 50
}
//定義帶參的構(gòu)造方法
init(a: Int) {
aLength = a
bLength = 40
cLength = 50
}
init(aLength: Int,bLength: Int,cLength: Int){
self.aLength = aLength
self.bLength = bLength
self.cLength = cLength
//誰調(diào)用該方法 self關(guān)鍵字就相當(dāng)于誰
}
func test() {
print(self.aLength)
print("我是測(cè)試函數(shù)")
}
func createTriangle() {
let a = pow(Double(aLength), 2.0)
let b = pow(Double(bLength), 2.0)
let c = pow(Double(cLength), 2.0)
if a + b == c || a + c == b || b + c == a {
print("可以組成直角三角形")
}
}
}
var tr1 = Triangle()
print(tr1.cLength)
var tr2 = Triangle(aLength: 3, bLength: 4, cLength: 5)
tr2.test()
tr2.createTriangle()