Swift 可选接口
Objective-C 中的 Protocol 里存在 @optional 关键字,被这个关键字修饰的方法并非必须要被实现。比如最常见的 UITableViewDataSource 和 UITableViewDelegate。但是在 Swift 中的 Protocol 的所有方法都是必须被实现的。那么我们怎么样才能在 Swift 实现可选接口呢?
- @objc & optional
- 接口扩展
Objective-C 中的 Protocol 里存在 @optional 关键字,被这个关键字修饰的方法并非必须要被实现。比如最常见的 UITableViewDataSource 和 UITableViewDelegate。但是在 Swift 中的 Protocol 的所有方法都是必须被实现的。那么我们怎么样才能在 Swift 实现可选接口呢?
前面两篇文章分别记录了自己学习 Runtime 的一些知识点以及常见的一些应用。之前立下 flag 说准备写三篇关于 Runtime 的文章,于是就有了这篇文章。
本文准备利用前面学习的内容来解答两道在sunnyxx的神经病院objc runtime入院考试的面试题。
上一篇文章中介绍了 Runtime 的一些基本知识,以及方法传递的具体流程。这篇文章本想主要介绍 Runtime 的另一个核心概念——类的动态配置。但是,发现在写动态配置时,有许多实际应用的东西,索性直接写一篇实际应用吧。
本篇文章主要介绍几种 Runtime 的实际应用:
Objective-C 扩展了 C 语言,并加入了面向对象特性和消息传递机制。而这个扩展的核心就是 Runtime 库。它是 Objective-C 面向对象和动态机制的基石。
基于我对 Runtime 的理解,我认为它的核心知识基本都围绕两个中心:
Runtime 的知识点比较多,计划用三篇文章来记录下自己的学习过程:
排序是我们的日常开发中经常会遇到的需求,例如,在商品的列表页面,我们可以根据各种维度(销量、价格、人气等)对商品的展示顺序进行改变。
所以,对各个排序的性能的了解也是基础且重要的。我们先对排序这一块进行一个整体的把握。
前面几篇文章大概介绍了几个常用的数据结构。
根据我的理解,数据结构帮助我们对需要解决的问题进行描述,而算法就是我们解决问题方案的具体描述。它包括对问题的分析及研究(建立描述问题的数学模型),然后根据一些策略和思想制定出解决问题的方案。
这篇文章讲述了四个算法设计时的常用思想并给出了相应的例子:
链表是实现线性表的链式存储结构的一种数据结构,链表根据结定义不同也有几个种类,分别为:
以下的实例代码,都是以单链表为例的。