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

可选协议和协议扩展

作者: fordring2008 | 来源:发表于2017-02-04 10:20 被阅读21次

// 可选协议和协议扩展

// 原生的 Swift protocol里 没有可选项,所有定义的方法都是必须实现的。如果我们想要像 OC 里那样定义可选的协议方法,就需要将协议本身和可选方法都定义 OC的,也即在 protocol 定义之前以及协议方法之前加上 @objc 。另外和 OC 的 @optional 不同,我们使用没有@符号的关键字 optional 来定义可选方法:

@objc protocol OptionalProtocol {

@objc optional func optionalMethod()      // 可选

func necessaryMethod()                    // 必须

@objc optional func anotherOptionalMethod() // 可选

}

// 另外,对于所有的声明,他们的前缀修饰是完全分开的。也就是说你不能像是在 OC 里用一个 @optional 指定接下来的若干方法都是可选的了,必选对每一个可选方法添加前缀,对于没有前缀的方法来说,他们是默认必须实现的:

// 一个不可避免的限制是,使用 @objc 修饰的 protocol 就只能被 class 实现了,也就是说,对于 struct 和 enum 类型,我们是无法无法令它们所实现的协议中含有可选方法或者属性的。另外,实现它的 class 中方法还必须也就备注 @objc, 或者这个类就是继承 NSObject。这对我们写代码来说是一种让人郁闷的限制。

// 在 Swift 2.0, 我们有了另一种选择,那就是使用 protocol extension。我们可以在声明一个 protocol 之后再用 extension 的方式给部分方法默认的实现。这样这些方法在实际的类中就是可选的了。

相关文章

  • [Swift Tips 读书笔记]从 Objective-C 到

    @objc 和 dynamic 可选协议和协议扩展 内存管理,weak 和 unowned @autoreleas...

  • 可选协议和协议扩展

    // 可选协议和协议扩展 // 原生的 Swift protocol里 没有可选项,所有定义的方法都是必须实现的。...

  • Swift(2)

    可选类型(?) 隐式解析可选类型(!) 结构体 类 协议 扩展 闭包

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

    Objective-C 可选协议 -> 非必须实现 使用 @optional 关键字 Swift 可选协议 第一种...

  • 扩展协议实现方法可选

    import Foundation需求:希望把playBasketball()设计为可选,可以实现也可以不实现方案...

  • swift 可选协议

    前言 swift 协议 swift可选协议 协议前添加 @objc ,把你想要改成的可选协议前添加 @objc ...

  • swift 4.0 协议 协议扩展

    协议 协议扩展

  • swift 扩展和协议的结合

    协议和扩展是可以结合使用的,可以通过扩展使已有的类型采纳某个协议,也可以对现有协议进行扩展。 一、通过扩展采纳协议...

  • POP-面向协议编程

    什么是面向协议编程? 面向协议 = 协议 + 扩展 + 继承通过协议、扩展做功能划分,降低模块间的耦合,增强代码的...

  • swift 协议方法可选

    swift 协议方法可选 让一个类去实现这个协议 可选协议我们可以不用去实现,但是可以直接去调用testOptio...

网友评论

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

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