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