协议(Protocols)
Swift
协议定义一个接口或类型以供其他数据结构来遵循。
Swift
标准库中的一个例子:
CustomStringConvertible
是一个以打印为目的的自定义格式化输出的类型。
protocol CustomStringConvertible {
var description: String { get }
}
该协议只有一个要求,即一个只读(getter
)类型的字符串(String
类型)。我们可以很容易为enum
实现这个协议。
enum Trade: CustomStringConvertible {
case Buy, Sell
var description: String {
switch self {
case Buy: return "We're buying something"
case Sell: return "We're selling something"
}
}
}
let action = Trade.Buy
print("this action is \(action)")
// prints: this action is We're buying something
扩展(Extensions)
枚举也可以进行扩展,最明显的用例就是将枚举的case
和method
分离:
enum Entities {
case Soldier(x: Int, y: Int)
case Tank(x: Int, y: Int)
case Player(x: Int, y: Int)
}
为enum
扩展方法:
extension Entities {
mutating func move(dist: CGVector) {}
mutating func attack() {}
}
同样可以通过写一个扩展来遵循一个特定的协议:
extension Entities: CustomStringConvertible {
var description: String {
switch self {
case let .Soldier(x, y): return "\(x), \(y)"
case let .Tank(x, y): return "\(x), \(y)"
case let .Player(x, y): return "\(x), \(y)"
}
}
}