手把手带你学习Swift3.0(27):协议

//: Playground - noun: a place where people can play

import UIKit


/*
 1> 协议的定义
 2> 如何类遵守协议
 3> 协议在代理设计模式中如何使用
 4> 协议中方法的可选性
    protocol前面需要加上@objc
    方法前面加上 @objc optional
 */

// 1.协议的定义
protocol SportProtocol {
    // 默认情况下协议中的方法都是必须实现的方法
    func playBasketball()
    func playFootball()
}

// 2.定义类,并且遵守协议
class Teacher : SportProtocol {
    func playFootball() {
        print("踢足球")
    }
    
    func playBasketball() {
        print("打篮球")
    }
}


class Student : NSObject, SportProtocol {
    func playFootball() {
        print("踢足球")
    }
    
    func playBasketball() {
        print("打篮球")
    }
}


// 3.协议在代理设计模型中的使用
/*
 定义协议时, 协议后面最好跟上 : class
 delegate的属性最好用weak, 用于防止产生循环引用
 */
protocol BuyTicketDelegate : class {
    func buyTicket()
}


class Person {
    
    // 定义代理属性
    weak var delegate : BuyTicketDelegate?
    
    func goToBeijing() {
        delegate?.buyTicket()
    }
}


// 4.如何让协议中的方法是可选方法
// optional属于OC特性, 如果协议中有可选的方法, 那么必须在protocol前面加上@objc, 也需要在optional前面加上@objc
@objc protocol TestProtocol {
    @objc optional func test()
}


class Dog : TestProtocol {
    func test() {
        
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容