1. 程式人生 > >swift文件筆記(十七) -- 協議

swift文件筆記(十七) -- 協議

協議就是協議裡的屬性方法,在遵循協議的類·結構體·列舉中,必須要有實現。

1.協議語法

protocol SomeProtocol {
// 這裡是協議的定義部分 

var mustBeSettable: Int { get set }//讀寫

 var doesNotNeedToBeSettable: Int { get }//只讀,但實際實現中可以是讀寫

2.構造器要求

你可以在遵循協議的類中實現構造器,無論是作為指定構造器,還是作為便利構造器,你都必須為構造器實現標上 required 修飾符


3.擴充套件和協議

通過擴充套件新增協議一致性 (擴充套件型別,

不用強制在原型別中,加入方法)

extension Dice: TextRepresentable {

     var textualDescription: String {

         return "A \(sides)-sided dice"

     }

通過擴充套件遵循協議 (本來不遵循協議的,變成遵循協議)

extension Dice: TextRepresentable {

協議可以通過擴充套件來為遵循協議的型別提供屬性、方法以及下標的實現。(擴充套件協議)

//基於協議本身來實現這些功能,而無需在每個遵循協議的型別中都重複同樣的實現,也無需使用全域性函式。

//為協議擴充套件新增限制條件,用 where 子句來描述,只適用於集合中的元素遵循了TextRepresentable協議的情況。

extension RandomNumberGenerator where Generator.Element: TextRepresentable  {

    func randomBool() -> Bool {

        return random() > 0.5

    }



4.協議的繼承

協議能夠繼承一個或多個其他協議,可以在繼承的協議的基礎上增加新的要求。

你可以在協議的繼承列表中,通過新增 class

關鍵字來限制協議只能被類型別遵循,而結構體或列舉不能遵循該協議。class 關鍵字必須第一個出現在協議的繼承列表中,在其他繼承的協議之前

protocol InheritingProtocol: class, SomeProtocol, AnotherProtocol { 

// 這裡是協議的定義部分 


5.可選的協議要求

可選要求用在你需要和 Objective-C 打交道的程式碼中。

協議和可選要求都必須帶上 @objc 屬性。標記 @objc 特性的協議只能被繼承自 Objective-C 類的類或者 @objc 類遵循,其他類以及結構體和列舉均不能遵循這種協議。

@objc protocol CounterDataSource {

    optional func incrementForCount(count: Int) -> Int

    optional var fixedIncrement: Int { get }