在swift中進行物件導向程式設計時,盡量使用協議和泛型,而不是類繼承,因為過深的繼承層次很容易讓**充滿難以理解的類。
前面我們介紹過了類的擴充套件,協議的擴充套件也是類似的,協議擴充套件可以新增現有的計算屬性和方法,不能新增儲存屬性。擴充套件不會增加協議的需求。
下面的**中,所有實現worker協議的結構體都獲得了乙個getdesc方法。
protocol
worker
var worktime:
int}
struct
teacher
:worker
struct
coder
:worker
extension
worker
}var coder=
coder()
print
(coder.
getdesc()
)
和泛型一樣,協議也能使用where子句進行型別限制,下面的**擴充套件了sequence協議,使陣列元素為worker時新增乙個printallworker方法。
extension
sequence
where
iterator
.element
==worker}}
let workers:
[worker]=
[coder()
,teacher()
]workers.
printallworker
()
在coder型別中可以使用同名方法覆蓋協議擴充套件中的方法,不過當coder當做乙個worker來使用的時候還是會呼叫worker中的方法。
struct
coder
:worker
}let workers:
[worker]=
[coder()
,teacher()
]//i am a coder,i work 10 hours everday
//i am a teacher,i work 8 hours everday
workers.
printallworker()
//hello world
let coder=
coder()
print
(coder.
getdesc()
)
Swift 學習筆記 協議
如果類含有父類,則應當將父類放在所有的協議之前。協議 protocol oneprotocol或者 var argumentone int 唯讀 var argumenttwo int 讀寫 static var argumentclass int 類 class person oneprotoco...
swift 協議和擴充套件
在擴充套件裡新增協議遵循 你可以擴充套件乙個已經穿在的型別來採納和遵循乙個新的協議,舊算時你無法訪問現有的型別的源 也行,擴充套件可以新增新的屬性 方法 和下標到已經存在的型別。並且因此允許你新增協議需要的任何結果 from import uikit protocol textrepresentab...
Swift學習筆記十六 協議
protocol 協議 用於統一方法和屬性的名稱,而不實現不論什麼功能。協議可以被類。列舉。結構體實現。滿足協議要求的類,列舉,結構體被稱為協議的 遵循者。遵循者須要提供 協議指定的成員,如屬性,方法,操作符,下標等。一 協議的基本的語法 咱們還是先上 吧 protocol human var is...