协议为方法、属性、以及其他特定的任务需求或功能定义一个大致的框架
。协议可被类、结构体、或枚举类型采纳以提供所需功能的具体实现。满足了协议中需求的任意类型都叫做遵循了该协议。
protocol SomeProtocol {
// 属性
// 方法
}
{get}
或者{get set}
,注意:get与set之间是没有逗号的mutating
方法protocol Pet {
// 定义属性
var name: String {get set}
var age: String {get}
// 定义方法
func feed(food: String)
mutating func shout(sound :String);
}
class SomeClass: SomeSuperClass, FirstProtocol, AnotherProtocol {
// 类的内容
// 实现协议中的方法
}
// 1.定义协议
protocol SportProtocol {
func playBasketball()
func playFootball()
}
// 2.遵守协议
// 注意:默认情况下在Swift中所有的协议方法都是必须实现的,如果不实现,则编译器会报错
class Person : SportProtocol {
var name : String?
var age : Int = 0
// 实现协议中的方法
func playBasketball() {
print("人在打篮球")
}
func playFootball() {
print("人在踢足球")
}
}
protocol CrazySportProtocol {
func jumping()
}
protocol SportProtocol : CrazySportProtocol {
func playBasketball()
func playFootball()
}
protocol BuyTicketProtocol {
func buyTicket()
}
class Person {
// 1.定义协议属性
var delegate : BuyTicketProtocol
// 2.自定义构造函数
init (delegate : BuyTicketProtocol) {
self.delegate = delegate
}
// 3.行为
func goToBeijing() {
print("找黄牛买票")
delegate.buyTicket()
print("拿到票去北京")
}
}
class HuangNiu: BuyTicketProtocol {
func buyTicket() {
print("黄牛帮忙买了一张火车票")
}
}
let p = Person(delegate: HuangNiu())
p.goToBeijing()
@objc protocol SportProtocol {
func playBasketball()
optional func playFootball()
}
class Person : SportProtocol {
var name : String?
var age : Int = 0
// 实现协议中的方法
@objc func playBasketball() {
print("人在打篮球")
}
}
扩展协议
protocol SomeProtocol {
func requiredFunc()
func optionalFunc()
}
extension SomeProtocol {
func optionalFunc() {
print("optionalFunc扩展中实现")
}
}
Class SomeClass: SomeProtocol {
func requiredFunc() {
print("requiredFunc具体类中实现")
}
}