Swift学习 -协议

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

import UIKit

/*
 1> 协议的定义
 2> 如何类遵守协议
 3> 协议在代理设计模式中如何使用
 */


//1.协议的定义

protocol SportProtocol {
    //默认情况下 ,协议中的方法,都要实现
    func playBasketball()
    func playFootball()
}

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


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


//4, 协议在代理中设计模式的使用

/*
 定义协议时,协议后面最好跟上: class  ???
 delegate 的属性最好用weak, 用于防止产生循环引用
 
 */
protocol buyticketDelegate : class {
    func buyTicket()
}

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


//5. 如何让协议中方法时可选方法
//optional 属于OC特性, 如果协议中有可选的方法, 那么必须在protocol 前面加上@objc,也需要在optional前面加上@objc


@objc protocol TestProtocol {
  @objc optional  func test()
    
}

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


你可能感兴趣的:(Swift学习 -协议)