POP面向協議編程

1、繼承

  • LGMonkey繼承LGAnimal
  • LGMonkey重寫了leg屬性、和eat方法
class LGAnimal: NSObject {
    var leg:Int {return 4}
    func run(){
        print("\(leg)只腳奔跑")
    }
    func eat(){
        print("肉")
    }
}

class LGMonkey: LGAnimal {
    override var leg: Int {return 2}
    override func eat() {
        print("🍑")
    }
}
複製代碼

2、協議

  • 實現協議就必需要實現協議裏面的屬性,和方法
  • 若是在extension中實現了sayHello方法(屬性同理),LGTeacherLGStudent中就能夠沒必要須實現sayHello方法;反之若是extension沒有實現,就必須在LGTeacherLGStudent中實現
  • 在結構體、類和extension中,協議屬性的實現有點不一樣
    • 結構體:var name: String
    • 類:var name: String = ""
    • extension:var name: String { return "dyz" }
  • 父類擴展了這個協議extension UIViewController: LGUIProtocol{ },子類就不能再擴展extension TableViewController: LGUIProtocol{ },會報錯哦'TableViewController' inherits conformance to protocol 'LGUIProtocol' from superclass here
protocol LGProtocl {
    /// 協議屬性
    var name: String {get}
    /// 協議方法
    func sayHello()
}

extension LGProtocl {
    var name: String {
        return "hello"
    }
    func sayHello() {
        print("extension hello")
    }
}

/// LGTeacher結構體來實現協議
struct LGTeacher: LGProtocl{
    var name: String
//    func sayHello() {
//        print("你好")
//    }
}

struct LGStudent: LGProtocl {
    var name: String
//    func sayHello() {
//        print("別煩我,我要學習POP")
//    }
}

class Person: LGProtocl {
    var name: String = ""
    
    func sayHello() {
        print("你好")
    }
}

extension UIViewController: LGProtocl {
    var name: String {
        return "dyz"
    }
}
複製代碼
相關文章
相關標籤/搜索