Swift学习笔记-可选协议

在 Objective-C 中的协议方法分为可选 @optional 和必须 @required 两种。但是在 Swift 中则不同,所有的协议方法都是必须的。如果我们想要声明一个可选的接口,这该怎么做呢?

上代码:

1
2
3
4
5
@objc protocol OptionalProtocol {
optional func optionalFunc1() //可选
func requiredFunc() //必须
optional func optionalFunc2() //可选
}

这是我们需要在协议定义之前加上 @objc 修饰,实际上是让这个协议本身被定义为 Objective-C 的。这里的声明和 Objective-C 不同的是没有 @ 做开头。而且在 Swift 中,所有的前缀修饰符和声明都是完全分开的。也就是说必须为每一个声明都添加一个修饰符。对于没有修饰符的方法来说,他们都是必须实现的。

可选的协议不能被 Struct 和 enum 类型实现,也就是说只能被 class 实现,struct 和 enum 类型中不能包括可选方法或者属性,这算是一个弊端吧。