在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...