美文网首页
swift3 笔记 可选协议 和 协议扩展

swift3 笔记 可选协议 和 协议扩展

作者: 文瑶906 | 来源:发表于2017-06-29 16:52 被阅读0次

    Objective-C

    可选协议 -> 非必须实现
    • 使用 @optional 关键字

    Swift

    可选协议
    • 第一种
      • 在 protocol 定义的前面和协议方法的前面加上 @objc。
    @objc protocol OptionalProtocol {
                @objc optional func optionalMethod()
    }
    
    @objc protocol OptionalProtocol {
        @objc optional func optionalMethod()  // 可选
        func necessaryMethod()          // 必须
        @objc optional func anotherOptionalMethod() // 可选
    }
    

    使用 @objc 修饰 会出现的问题:

    • 此 protocol 只能被 class实现
    • struct 和 enum 类型 ,不能实现 协议中 含有的可选方法或者属性
    • class中的方法也必须被标注为 @objc,或整个类就是继承自 NSObject.

    在 Swift 2.0 中,出现了第二种方法

    protocol extension

    • 在声明一个 protocol 之后 , 在 用 extension 的方式 给 部分方法默认的实现。
    • 这样 这些方法在实际的类中就是可选实现的了。
    protocol OptionalProtocol {
        func optionalMethod()        // 可选
        func necessaryMethod()       // 必须
        func anotherOptionalMethod() // 可选
    }
    
    extension OptionalProtocol {
        func optionalMethod() {
        print("Implemented in extension")
        }
    
        func anotherOptionalMethod() {
            print("Implemented in extension")
        }
    }
    
    class MyClass: OptionalProtocol {
        func necessaryMethod() {
            print("Implemented in Class3")
        }
    
        func optionalMethod() {
            print("Implemented in Class3")
        }
    }
    

    调用

    let obj = MyClass()
    obj.necessaryMethod() // Implemented in Class3
    obj.optionalMethod()  // Implemented in Class3
    obj.anotherOptionalMethod() // Implemented in extension
    

    相关文章

      网友评论

          本文标题:swift3 笔记 可选协议 和 协议扩展

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