本教程屬於 Swift 系列

通訊協定是一種讓不同類型的對象具有共同功能的方法。

通訊協定的定義如下:

protocol Mammal {

}

結構體和類別可以採用通訊協定:

struct Dog: Mammal {

}

class Cat: Mammal {

}

通訊協定可以定義屬性和方法,但不提供值和實現,結構體/類別必須實現它們:

protocol Mammal {
    var age: Int { get set }
    func walk()
}

屬性可以定義為 getget set。如果是 get,則屬性必須實現為只讀,并帶有一個 getter。

任何採用該通訊協定的類型必須遵從該協定,即實現這些方法或提供這些屬性:

struct Dog: Mammal {
    var age: Int = 0
    func walk() {
        print("The dog is walking")
    }
}

class Cat: Mammal {
    var age: Int = 0
    func walk() {
        print("The cat is walking")
    }
}

結構體和類別可以採用多個通訊協定:

struct Dog: Mammal, Animal {

}

class Cat: Mammal, Animal {

}

注意,對於類別來說,這與定義超類的語法相同。如果有超類,則在冒號之後將其列為第一個項目。