在 Swift 中,協議(protocol)是一種定義方法、屬性和其他特定任務的藍圖。類、結構體或枚舉可以遵循(adopt)協議,從而提供所需的功能。協議定義了一組要求,遵循協議的類型需要提供對應的功能實現。
定義協議
使用關鍵字 protocol
來定義一個協議。協議可以包含方法、屬性、下標、以及其他協議等。
示例:
protocol FullyNamed {var fullName: String { get }
}
遵循協議
使用 class
、struct
或 enum
關鍵字后面跟著協議名來表示該類型遵循了該協議。
示例:
struct Person: FullyNamed {var fullName: String
}
屬性要求
協議可以要求遵循協議的類型提供特定的屬性,并指定這些屬性是只讀的還是可讀寫的。
示例:
protocol SomeProtocol {var readOnlyProperty: Int { get }var readWriteProperty: String { get set }
}
方法要求
協議可以要求遵循協議的類型實現特定的方法。
示例:
protocol RandomNumberGenerator {func random() -> Double
}
擴展協議
協議可以通過擴展來提供方法和屬性的默認實現。
示例:
extension RandomNumberGenerator {func randomBool() -> Bool {return random() > 0.5}
}
協議組合
可以使用協議組合來要求一個類型遵循多個協議。
示例:
protocol Named {var name: String { get }
}
protocol Aged {var age: Int { get }
}
func wishHappyBirthday(to celebrator: Named & Aged) {print("Happy birthday, \(celebrator.name), you're \(celebrator.age)!")
}
在 Swift 中,協議是非常靈活和強大的,它可以用于定義接口、多態和代碼復用。通過協議,我們可以定義出清晰的抽象接口,使得代碼更加模塊化和可復用。