Swift 可选接口

栏目: Swift · 发布时间: 6年前

内容简介:Objective-C 中的 Protocol 里存在 @optional 关键字,被这个关键字修饰的方法并非必须要被实现。比如最常见的 UITableViewDataSource 和 UITableViewDelegate。但是在 Swift 中的 Protocol 的所有方法都是必须被实现的。那么我们怎么样才能在 Swift 实现可选接口呢?原生的 Swift Protocol 里是没有可选项的,所有定义的方法都是必须被实现的。如果我们需要像 Objective-C 里那样定义可选的方法,可以直接将接口

Objective-C 中的 Protocol 里存在 @optional 关键字,被这个关键字修饰的方法并非必须要被实现。比如最常见的 UITableViewDataSource 和 UITableViewDelegate。但是在 Swift 中的 Protocol 的所有方法都是必须被实现的。那么我们怎么样才能在 Swift 实现可选接口呢?

  • @objc & optional
  • 接口扩展

@objc & optional

@objc protocol MyProtocol {
    func doSomething()
    
    @objc optional func doSomething_optional()
}

class MyClass: NSObject, MyProtocol {
    func doSomething() {
        
    }
}

/// 编译不通过
/// Non-class type 'MyStruct' cannot conform to class protocol 'MyProtocol'
struct MyStruct: MyProtocol {
    
}
复制代码

原生的 Swift Protocol 里是没有可选项的,所有定义的方法都是必须被实现的。如果我们需要像 Objective-C 里那样定义可选的方法,可以直接将接口本身定义为 Objective-C 的。

优势

  • 直接以 Objective-C 的接口使用方式来使用。

劣势

  • 使用 @objc 修饰的 Protocol 就只能被 class 实现。对于 struct 和 enum 类型,我们无法实现此种方式定义的接口。

接口扩展

extension MyProtocol {
    func doSomething_optional() {
        print("Default implementing by extension protocol.")
    }
}

class MyClass: MyProtocol {
    func doSomething() {
        // do something
    }
}

struct MyStruct: MyProtocol {
    func doSomething() {
        // do something
    }
}

enum MyEnum: MyProtocol {
    func doSomething() {
        // do something
    }
}
复制代码

虽然 Swift 中定义的 Protocol 的方法都是必须实现的,但是我们可以利用 protocol extension 的方式给出部分方法的默认实现。

优势

  • 利用 extension 给出默认实现的接口可以供 class、struct 及 enum 使用。

劣势

  • 对于有返回值的接口,默认实现总是需要提供一个合适的返回值,但是并不总是有合适的默认值返回。

例如:

protocol MyProtocol {
    func calculateRadian() -> Double
}
复制代码

这里的 Protocol 定义的方法返回一个计算出来的弧度,但是这时我们就很难找到一个合适的默认值去默认实现接口的方法。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++数据结构与算法

C++数据结构与算法

[美]乔兹德克(Adam Drozdek) / 徐丹、吴伟敏 / 清华大学出版社 / 2014-10-1 / 63.00元

本书全面系统地介绍了数据结构,并以C++语言实现相关的算法。书中主要强调了数据结构和算法之间的联系,使用面向对象的方法介绍数据结构,其内容包括算法的复杂度分析、链表、栈、队列、递归、二叉树、图、排序和散列。书中还清晰地阐述了同类教材中较少提到的内存管理、数据压缩和字符串匹配等主题。书中包含大量的示例分析和图形,便于读者进一步理解和巩固所学的知识。一起来看看 《C++数据结构与算法》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具