Swift Syntax L2 -- Udacity 筆記
目錄:
1.淺入淺出Optional type
2.淺入淺出Protocols & Extensions(所在章節(jié))
3.淺入淺出Closures Expressions
以上章節(jié)簡介:淺入淺出Swift語法
Protocols & Extensions
前言
Protocol是實(shí)施委托模式
的基礎(chǔ)
好了開始寫Protocol的筆記了.
文章結(jié)構(gòu):
Protocol:
1.什么是Protocol?
2.怎么用?
3.要它何用?
Extension:
1.Extension有什么用?
2.咋用但金?
Protocol的進(jìn)階用法:
利用Extension提供method的default定義
首先來一個(gè)問題
什么是Protocol?
Protocal
中文翻譯為協(xié)議
就是雙方必需準(zhǔn)守的意思值骇。
Protocol
主要是用來規(guī)定Class
使用了Protocol
的Class在定義時(shí):這Class里面一定要定義Protocol
里面寫下的method
和Propertity
怎么用?
定義協(xié)議protocol name {}
如下:
protocol MustSaySomeThing {
func hello() -> Void
func bye() -> Void
}
那么Class 則在繼承那里寫下要遵守的Protocol,如下:
class Roommate: MustSaySomeThing {
func hello() -> Void {
//么么噠
}
func bye() -> Void{
//再見
}
}
遵守protocolMustSaySomeThing
的Roommate
必!須!得!定!義!跟MustSaySomeThing
一樣的method
假如沒定義hello()
,就如下圖產(chǎn)生Error:
同時(shí),Protocol也是一種類型,于是就可以如下面代碼:
//班長 必須得說話
var BanZhang : MustSaySomeThing?
要它何用?
通過Protocol
就可以構(gòu)建iOS里面用得比較多的委托模式
如圖:
Master可以將它要執(zhí)行的methodhello()
通過Protocol委托出去給Detail來定義hello()
里面的內(nèi)容。
在Master里面定義delegate必需遵守protocol要糊,如下就實(shí)現(xiàn)了delegate
var delegate : protocol?
protocol的解釋就完了,下面有protocol的進(jìn)階用法妆丘。不過首先來了解一下Extension
Extension
Extension 是什么锄俄?
是Extension的使用就是能在原有的Class里面追加定義一些method或者propertity。
如圖:
咋用勺拣?
語法extension 要添加的Class的名字 {}
例如奶赠,為上面的Roommate類添加thankU method
extension Roommate{
func thankU() -> Void{
//謝謝你
}
}
let me = Roommate()
me.thankU()//謝謝你
到這里,關(guān)于Protocol&Extension的基本用法就介紹完了药有。下篇文章將介紹Swift Closure的用法與及縮略的寫法
接下來就是高階用法:利用Extension提供method的default定義
Protocol的進(jìn)階用法:
利用Extension提供method的默認(rèn)(default)定義:
使用語法:extension Protocol的名字{}
然后就是看代碼:
protocol MustSaySomeThing {
func hello() -> Void
func bye() -> Void
}
extension MustSaySomeThing{
func hello() -> Void{
//么么噠
}
func bye() -> Void{
//再見
}
}
class Roommate: MustSaySomeThing {
func bye() -> Void{
//good bye 永遠(yuǎn)不見
}
}
let me = Roommate()
me.hello() //么么噠
me.bye() //good bye 永遠(yuǎn)不見
如上代碼:
將MustSaySomeThing
Protocol默認(rèn)定義hello()毅戈。
這樣的話,Class Roommate里就可以不用定義hello()和bye()
除非你不想要Protocol默認(rèn)的定義愤惰,例如bye()
參考鏈接:Analyzing Swift Protocol Extensions and C# Abstract Classes