. 繼承
class nurse:Doctor{
//重寫父類方法, 一定要在方法前加 override
# 注意: 用Static修飾的方法是不可以重寫的類方法
override class func heh() {
print("我是子類, 重寫父類的class func 方法")
}
}
nurse.heh()```
***
####. Swift中的協(xié)議
1. 類, 結(jié)構(gòu)體和枚舉都可以遵循協(xié)議, 并提供具體實現(xiàn)來完成協(xié)議定義的方法和功能
2. 任意能夠滿足協(xié)議要求的類型, 被稱為遵循(conform)這個協(xié)議
3. 使用" @objc " 修飾的協(xié)議, 其中的方法可以聲明成可選實現(xiàn)(即:optional修飾)
>協(xié)議 --> 帶有可選擇實現(xiàn)函數(shù)
@objc protocol Men{
func cook()
func wash()
optional func KO() //使用@objc修飾, 可以有可選擇實現(xiàn)的方法
}```
協(xié)議 --> 必須實現(xiàn)所有函數(shù)
protocol Divid{
func lookKid()
}```
***
> 如果類在遵循協(xié)議的同時擁有父類, 應(yīng)該將父類名放在協(xié)議之前, 用逗號分隔, 例如:
//聲明一個類doc1, 繼承于Doctor, 且遵循Men和Divid協(xié)議
class doc1: Doctor,Men,Divid {
@objc func cook() {
print("做飯")
}
@objc func wash() {
print("洗衣服")
}
func lookKid() {
print("看孩子")
}
}
let doc:doc1 = doc1(name: "大娃", age: 10)
doc.cook()
doc.wash()
doc.lookKid()```
*Swift中的擴展
擴展(Extension)
- extension + 類名或者結(jié)構(gòu)體名(可以對一個類或者結(jié)構(gòu)體擴展方法)
- extension可以多次對一個類進行擴展, 也可以給一個類擴展協(xié)議方法
- 擴展就是向一個已有的類, 結(jié)構(gòu)體和枚舉, 添加新功能(方法)
- 擴展可以對一個類型添加新功能, 但是不能重寫已有的功能(方法)
*. 對一個類進行方法的擴展(添加方法)
extension doc1{
//擴展對象方法
func say(){
print("擴展對象的方法")
}
//擴展類方法
class func eat() {
print("擴展類的方法")
}
}
doc.say()
doc1.eat() //類方法, 只能用類名來調(diào)用```
*. 擴展一個類, 遵循的協(xié)議中的方法 //給一個類擴展協(xié)議方法 , 該方法只能在該處使用
extension doc1{
@objc func Magic(){
print("變魔術(shù)")
}
}
doc.Magic()```
閉包 ---------
- 閉包是自包含的函數(shù)代碼塊, 可以在代碼中被傳遞,使用
- Swift中的閉包和OC中的Block, 以及其他語言中的匿名函數(shù)類似
- 閉包可以捕獲和存儲其所在上下文中任意的常量和變量, 也就是說閉合并包裹著這些常量和變量
- Swift會幫你管理在捕獲過程中涉及到的內(nèi)存操作
- 格式:
{(參數(shù)名:類型)->返回值類型 in
需要執(zhí)行的代碼
}
- 例如:
let backString = {
(name:String)->String in
return name
}```
>7. in: 閉包的函數(shù)體部分由關(guān)鍵字" in "引入, 該關(guān)鍵字表示閉包的參數(shù)和返回值類型定義已經(jīng)完成. 閉包函數(shù)體即將開始
######閉包代碼實例
//求兩個數(shù)的最大值(三目運算)
//var maxResult:((a:Int, b:Int)->Int)
var maxResult:((a:Int, b:Int)->Int)
//第一種方式:
maxResult = {
(a:Int, b:Int)->Int in
return a > b ? a : b
}
//第二種方式
maxResult = {
a,b in
return a > b ? a : b
}
//第三種方式
maxResult = {
a, b in
a > b ? a : b
}
//第四種方式
maxResult = {
(a, b)->Int in
return a > b ? a : b
}
//第五種方式
maxResult = {
$0 > $1 ? $0 : $1
}
print(maxResult(a: 3, b: 8))```