Swift 面向協議程式設計的一點見解

2022-01-22 13:31:23 字數 914 閱讀 8424

都說swift與objective c最大的區別就是面向協議程式設計, 這個話要這麼理解,到底什麼場景下需要用到協議呢?

下面舉個例子來說說我個人對於這個問題的一些看法

假如現在有乙個頁面需要彈出乙個彈框, 彈框有很多不同的形式. 

帶"確認"和"取消"兩個按鈕的彈框

右上角有個"x"的關閉按鈕的彈框

帶有遮罩背景的彈框

於是我們寫**的時候可以分別定義3個不同的繼承自uiview的子類,如下所示

問題來了:突然有乙個需求,要有乙個既帶遮罩又帶關閉按鈕的彈框, 那要怎麼實現呢. 我們都知道swift是不支援多繼承的,所以我們無法定乙個既繼承 alertviewwithclosebutton 又繼承alertviewwithmask 的子類. 你也許會想, 我只定義乙個alertview包含所有的功能就不會有這樣的問題了啊,像下面這樣的

這樣做的確解決了剛剛的問題, 但是也存在幾個問題:

但是面向協議就可以完美解決上面提到的3個問題

對於第乙個問題,可以這樣寫

對於第二個問題

對於第三個問題, 只需要對原有的 uiviewwithbutton 做乙個擴充套件就可以了

Swift 面向協議程式設計入門

本文講的是swift 面向協議程式設計入門,class humanclass var classyhuman humanclass name bob classyhuman.name bob var newclassyhuman classyhuman created a copied object...

Swift 面向協議程式設計之協議擴充套件

協議的命名遵循swift的標準庫,即協議名以 type able ible 結尾。例如 sequencetype,generatortype,customstringcoveeertible,type定義行為,able定義元素怎樣做事。swift 能擴充套件協議 協議可以新增方法和屬性 協議擴充套件...

Swift面向協議程式設計入門指北

熟悉objective c語言的同學們肯定對協議都不陌生,在swift中蘋果將protocol這種語法發揚的更加深入和徹底。swift中的protocol不僅能定義方法還能定義屬性,配合extension擴充套件的使用還能提供一些方法的預設實現,而且不僅類可以遵循協議,現在的列舉和結構體也能遵循協議...