自學swift (3) --- 協議

協議這個東西吧,就是定義一套規範的方法,屬性,不去實現它。
可以被類,結構體等實現。

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"
        }
    }

如果這個類或結構體有父類,父類寫在最前邊,如果還需要遵守多個協議,在後邊用”,”隔開。遵守協議的類裏要把協議裏的內容實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章