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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、随机数 不需要随机数种子 arc4random()%N + begin:产生begin~begin+N的随机数...
    我是小胡胡123阅读 9,712评论 0 2
  • 132.转换错误成可选值 通过转换错误成一个可选值,你可以使用 try? 来处理错误。当执行try?表达式时,如果...
    无沣阅读 5,086评论 0 3
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,800评论 0 9
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,191评论 4 61
  • 记忆这东西很有趣,它会因人、时期而异。当你还年轻,记忆于你来说并不重要,因为大好生活还在前方;一旦韶华不在,...
    肖仕清阅读 3,777评论 2 0