美文网首页
swift最新语法总结(协议)

swift最新语法总结(协议)

作者: coder_xiang | 来源:发表于2019-03-25 17:35 被阅读0次

    协议的格式

    协议的定义方式与类,结构体,枚举的定义都非常相似

    protocol SomeProtocol {
        // 协议方法
    }
    

    遵守协议的格式

    class SomeClass: SomeSuperClass, FirstProtocol,   AnotherProtocol {
        // 类的内容
        // 实现协议中的方法
    }
    

    协议的基本使用

    定义协议和遵守协议

    // 1.定义协议
    protocol SportProtocol {
        func playBasketball()
        func playFootball()
    }
    // 2.遵守协议
    // 注意:默认情况下在swift中所有的协议方法都是必须实现的,如果不实现,则编译器会报错
    class Person : SportProtocol {
        var name : String?
        var age : Int = 0
    
        // 实现协议中的方法
        func playBasketball() {
            print("人在打篮球")
        }
    
        func playFootball() {
            print("人在踢足球")
        }
    }
    

    协议之间的继承

    protocol CrazySportProtocol {
        func jumping()
    }
    
    protocol SportProtocol : CrazySportProtocol {
        func playBasketball()
        func playFootball()
    }
    

    代理设计模式

    协议继承用于代理设计模式

    protocol BuyTicketProtocol {
        func buyTicket()
    }
    
    class Person {
        // 1.定义协议属性
        var delegate : BuyTicketProtocol
    
        // 2.自定义构造函数
        init (delegate : BuyTicketProtocol) {
            self.delegate = delegate
        }
    
        // 3.行为
        func goToBeijing() {
            delegate.buyTicket()
        }
    }
    
    
    class HuangNiu: BuyTicketProtocol {
        func buyTicket() {
            print("买了一张火车票")
        }
    }
    
    let p = Person(delegate: HuangNiu())
    p.goToBeijing()
    

    协议中方法的可选

    // 1.定义协议
    @objc
    protocol SportProtocol {
        func playBasketball()
    
        optional func playFootball()
    }
    
    // 2.遵守协议
    class Person : SportProtocol {
        var name : String?
        var age : Int = 0
    
        // 实现协议中的方法
        @objc func playBasketball() {
            print("人在打篮球")
        }
    }
    

    相关文章

      网友评论

          本文标题:swift最新语法总结(协议)

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