Swift vs. Objective-C
- 用Swift 将协议(protocol)中的部分方法设计成可选(optional),该怎样实现?
@optional
和@required
是Objective-C中特有的关键字。
Swift中,默认所有方法在协议中都是必须实现的。而且,协议里方法不可以直接定义optional
。先给出两种解决方案:
- 在协议和方法前都加上
@objc
关键字,然后再在方法前加上optional
关键字。该方法实际上是把协议转化为Objective-C的方式然后进行可选定义。示例如下:
* @objc protocol SomeProtocol {
* func requiredFunc()
* @objc optional func optionalFunc()
* }
- 用扩展(extension)来规定可选方法。Swift中,协议扩展(protocol extension)可以定义部分方法的默认实现,这样这些方法在实际调用中就是可选实现的了。示例如下:
* protocol SomeProtocol {
* func requiredFunc()
* func optionalFunc()
* }
*
* extension SomeProtocol {
* func optionalFunc() {
* print(“Dumb Implementation”)
* }
* }
*
* Class SomeClass: SomeProtocol {
* func requiredFunc() {
* print(“Only need to implement the required”)
* }
* }
上一题 | 目录 | 下一题 |
---|