Swift中協議的基礎知識

2021-08-08 13:34:33 字數 1337 閱讀 7243

在swift中,協議用於統一方法和屬性,或者說協議是特定的方法和屬性的集合,但是它本身並沒有實現,它只有宣告,具體的實現是由其它遵守該協議的主體來執行的。類、結構體和列舉在宣告的時候,都可以遵守乙個或者多個協議,並實現協議所要求的屬性或者方法。協議的格式一般為:

// 定義協議

protocol 協議名

// 遵守協議

class(struct/enum) 型別名: 父類, 協議1, 協議2...

需要注意,因為結構體和列舉沒有繼承關係,所以它們沒有父類和協議混合宣告的形式。另外,如果需要遵守多個協議,則多個協議之間用逗號進行分割。

1、靜態協議方法

如果要在協議中定義靜態方法,則需要在該方法前面加上關鍵字static。如果遵守該協議,並且實現協議中的靜態方法,則需要根據不同的情況在前面新增關鍵字static或者class。具體的新增規則如下:

2、可變的方法(mutating)

可變的方法只有在結構體和列舉中才有,在類中是沒有這樣的概念的。主要原因是,結構體和列舉型別中,它們的方法是不能直接修改自己的屬性的,而類是引用型別,方法本身就是可以變的,它可以修改自己的屬性:

struct person 

}class student

}

如果想在結構體或者列舉內部方法中修改自己的屬性,必須宣告可變的方法。宣告可變的方法,需要在方法前面加上關鍵字mutating。上面結構體person中的方法需要做如下修改才不會報錯:

struct person 

}

在結構體的協議方法前面加上關鍵字mutating之後,上面的**就不會報錯了。宣告可變的協議方法在實際開發過程中有大量的應用,比如說,我在之前的筆記《swift中的棧》中講棧資料結構的實現時,就用到了可變的協議方法。

值得一提的是,如果在協議中宣告了可變的協議方法,那麼遵守這個協議的類在實現協議的可變方法時,前面是不用加關鍵字mutating的;只有結構體和列舉在實現協議的可變方法時,才需要在該協議方法前面加上關鍵字mutating:

// 協議

protocol editabe

// 類

class person: editabe

}// 結構體

struct student: editabe

}// 列舉

enum week: editabe

}

協議在swift中非常的重要,其知識點也比較多,但是絕大部分都是非常基礎的,就不在這裡展開。

swift 基礎知識

swift 中可以不寫分號 用print列印 let 是不可變的 var 表示可變的 var a int 10 var c float 10.13 在swift 中相加的必須是同型別 print a c 會報錯 在swift 中 可以用特殊符號定義變數 var 老王 18 在swift 中 字串可以...

swift基礎知識二

語句以及強制解析 可以使用if語句和nil比較來判斷乙個可選值是否包含值,可以使用 來執行比較 如果可選型別有值,它將不等於nil var num int?3 if num nil 感嘆號 當你判斷乙個可選型別確實包含值之後,你可以在可選的名字後面加上感嘆號 來獲取值,這個感嘆號表示 我知道這個可選...

Swift3 0 基礎知識

本文對swift做乙個從oc的角度的基礎知識簡單概要。swift oc說明 let var const 在oc中不用const宣告的常量,都認為是變數 float double cgfloat intnsinteger string nsstring bool bool oc中的非1為flase,1...