Swift首页投稿(暂停使用,暂停投稿)iOS开发

Swift基础语法-协议

2016-08-01  本文已影响34人  DwightChan

1. 协议的格式

protocol 协议名称 {
    // 协议方法
}
protocol 协议名称 : 父协议1,父协议2,...,  {
    // 协议方法
}

2. 协议的基本使用

// 1.定义协议
// 注意:默认情况下在swift中所有的协议方法都是必须实现的,如果不实现,则编译器会报错
// 如果继承自基协议可以继承自NSObjectProtocol
protocol SportProtocol {
    // 协议中的方法, 要求遵守协议者, 必须实现, 不实现则直接报错
    func playBasketball()
    func playFootball()
}
// 2.遵守协议
// 定义一个类,让类遵守协议
class Person : SportProtocol {
    // 遵守协议, 必须实现协议中方法, 不实现则直接报错
    func playBasketball() {
        print("打篮球")
    }
    
    func playFootball() {
        print("踢足球")
    }
}
protocol CrazySportProtocol {
    func jumping()
}

protocol SportProtocol : CrazySportProtocol {
    func playBasketball()
    func playFootball()
}

3. 代理设计模式

// : class : 表示该协议只能被类遵守,不能被结构体/枚举类型遵守
protocol BuyTicketProtocol : class {
    func buyTicket()
}
class Person {
    var name : String = ""
    // 使用 weak 修饰遵循协议的属性, 则该协议必须遵循 class 协议, 
    // 如果没有遵循该协议则直接报错
    weak var delegate : BuyTicketProtocol? 
    //可以在定义属性或者变量的时候在协议名称后面添加问号`?`表示是可选类型, 
    //表示该属性可以没有代理
    
    func goToBeijing() {
        // 1.买火车票
        
        // 2.乘车去北京
        print("坐车去北京")
    }
}
class HuangNiu : BuyTicketProtocol {
    func buyTicket() {
        print("帮客户买一张票")
    }
}
let p = Person(delegate: HuangNiu())
p.goToBeijing()

4. 协议中方法的可选

// 1.定义协议
@objc
protocol SportProtocol {
    func playBasketball()

    optional func playFootball()
}

// 2.遵守协议
class Person : SportProtocol {
    var name : String?
    var age : Int = 0

    // 实现协议中的方法
    @objc func playBasketball() {
        print("人在打篮球")
    }
}
上一篇下一篇

猜你喜欢

热点阅读