协议这个东西吧,就是定义一套规范的方法,属性,不去实现它。
可以被类,结构体等实现。
protocol SomeProtocol {
var fullName : String{ get set }
func des() -> String
func funcDemo(name:String , age : Int) -> String
}
属性后的get set是要求这个属性的访问权限,可读,可写。然而你为一个var fullName: String{ get }
属性写了setter方法也不会错。
方法只需要定义方法名字、传参、返回值就可以了 其余不需要管,遵守协议的类,结构体等会去实现。
然而你遵守协议的时候可以有2种方法
1.在B类里写协议,B类里调用,由A类实现
BController.swift
protocol SomeProtocol : NSObjectProtocol{
func funcDemo(name:String , age : Int) -> String
}
weak var some:SomeProtocol?
override func viewDidLoad() {
super.viewDidLoad()
print("some\(self.some?.funcDemo("jam", age: 12))")
}
AController.swift
class Controller: UIViewController , SomeProtocol{
func funcDemo(name: String, age: Int) -> String {
return "name \(name) , age \(age)"
}
let B = BController()
B.some = self
}
这要注意
let B = BController()
B.some = self
这句必须执行到。即保证BController执行协议的时候要有人遵守
2.某个类或结构体来遵守这个协议并实现
class SubClass: FatherClass ,SomeProtocol {
var fullName: String = ""
func funcDemo(name: String, age: Int) -> String {
return "protocol func"
}
}
如果这个类或结构体有父类,父类写在最前边,如果还需要遵守多个协议,在后边用”,”隔开。遵守协议的类里要把协议里的内容实现。