協議這個東西吧,就是定義一套規範的方法,屬性,不去實現它。
可以被類,結構體等實現。
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"
}
}
如果這個類或結構體有父類,父類寫在最前邊,如果還需要遵守多個協議,在後邊用”,”隔開。遵守協議的類裏要把協議裏的內容實現。