/// 一般情况下,定义的协议都必须实现 protocol SomeProtocal { func doSomething() } /// 定义一个类,并且遵守协议 class Teacher:SomeProtocal { func doSomething() { print("回家烧饭") } } class Student:SomeProtocal{ func doSomething() { print("回家写作业") } } //定义协议的时候 协议后面最好跟上:class ,表示只能被类遵守 delegate的属性最好用weak 避免循环引用 protocol CookDelegate: class{ func cookFood() } class person { //定义代理属性 weak var delegte:CookDelegate? func doSomeThing() { delegte?.cookFood() } } //4、如何让协议中的方法是可选方法 //optional属于OC特性,如果协议中有可选的方法,那么必须在protocol和optional前面都加上@objc @objc protocol TestProtocol: class { @objc optional func test() } class Dog: TestProtocol {} class ViewController: UIViewController ,CookDelegate { internal func cookFood() { print("开始做饭了") } override func viewDidLoad() { super.viewDidLoad() let stud = Student.init() stud.doSomething() let person2 = person.init() person2.delegte = self person2.doSomeThing() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }