oc無法做到面向協議開發,而swift可以,因為swift可以做到協議方法的具體實現,而oc不行傳統的物件導向開發思維方式是將類中實現的相似方法抽取出來,接著放入乙個base類,然後繼承於base類後各個類即可找擁有相同的方法,不用再乙個個手動實現。
比如:乙個person類,乙個dog類,它們都擁有方法eat,那麼就可以新建乙個animal類,將eat方法抽取出來放入其中,然後將person類和dog類都繼承於animal。
但是,如果現在又有乙個robot類,也需要擁有eat方法,而此時也將其繼承於animal的話顯然是不合理的,於是我們就需要轉換思維,面向協議開發~
面向協議開發的核心是:模組化(元件化)
我們先來回顧下協議的一般使用,新建乙個swift檔案lxfprotocol.swift
import foundation
protocol lxfprotocol 複製**
我們的person類遵守協議lxfprotocol,需要我們實現協議中的方法,如:
class person: nsobject, lxfprotocol
}複製**
那我們每個類都這樣做的話跟直接複製貼上**並沒什麼不同~~
而開頭已經提到一點:
swift可以做到協議方法的具體實現那麼現在,我們新建乙個swift檔案eatable.swift,以區分lxfprotocol.swift
eatable.swift中的**實現如下:
import foundation
protocol eatable
extension eatable
}複製**
有2個注意點
使dog類遵守eatable
class dog: nsobject, eatable 複製**
這樣我們就可以在其它地方輕鬆呼叫dog的eat方法,person類與robot類也是如法炮製
至此,我們就可以通過面向協議的方式給類定製不同的功能,也就是模組化。可以發現swift的面向協議程式設計跟c++的多繼承很相似
現在的這個eatable協議是可以被任意遵守的,如果我們有這麼個需求,我們建立的協議只是被uiviewcontroller遵守,那我們該怎麼做呢?
【當然,eatable協議只能被uiviewcontroller遵守很扯淡,這裡只是舉例,不要太在意咯~~】
在 extension 後面加上約束關鍵字【where】,並註明該協議只能被uiviewcontroller這個類(包括子類)所遵守,而且此時我們還可以拿到遵守該協議的控制器的view
//import foundation
import uikit
protocol eatable
extension eatable where self : uiviewcontroller
}複製**
demo
接下來以乙個實際應用來鞏固下吧 ios - swift 面向協議程式設計(二)
Swift 面向協議程式設計之協議擴充套件
協議的命名遵循swift的標準庫,即協議名以 type able ible 結尾。例如 sequencetype,generatortype,customstringcoveeertible,type定義行為,able定義元素怎樣做事。swift 能擴充套件協議 協議可以新增方法和屬性 協議擴充套件...
Swift 面向協議程式設計入門
本文講的是swift 面向協議程式設計入門,class humanclass var classyhuman humanclass name bob classyhuman.name bob var newclassyhuman classyhuman created a copied object...
Swift Swift面向協議程式設計初探
swift面向協議程式設計初探 物件導向程式設計和面向協議程式設計最明顯的區別在於程式設計過程中對資料型別的抽取 抽象 上,物件導向程式設計使用類和繼承的手段,資料型別是引用型別 而面向協議程式設計使用的是遵守協議的手段,資料型別是值型別 swift中的結構體或列舉 面向協議程式設計是在物件導向程式...