Swift 协议

/// 一般情况下,定义的协议都必须实现
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.
    }


}
原文地址:https://www.cnblogs.com/lidarui/p/5992698.html