美文网首页
POP面向协议编程

POP面向协议编程

作者: Code_人生 | 来源:发表于2019-08-29 14:44 被阅读0次

    一、继承

    • 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("🍑")
        }
    }
    

    二、协议

    • 实现协议就必须要实现协议里面的属性,和方法
    • 如果在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"
        }
    }
    

    相关文章

      网友评论

          本文标题:POP面向协议编程

          本文链接:https://www.haomeiwen.com/subject/oxabectx.html