我想创建一个protocol在所有enums符合此条件的情况下强制执行某种情况的方法protocol。
protocol
enums
例如,如果我有一个enum这样的:
enum
enum Foo{ case bar(baz: String) case baz(bar: String) }
我想用扩展它protocol,增加另一种情况:
case Fuzz(Int)
这可能吗?
解决方法是使用struct带有static变量的a。
struct
static
注意:这是在 Swift 3 中完成的Notification.Name
Notification.Name
以下是 Swift 3* 的实现 *
struct Car : RawRepresentable, Equatable, Hashable, Comparable { typealias RawValue = String var rawValue: String static let Red = Car(rawValue: "Red") static let Blue = Car(rawValue: "Blue") //MARK: Hashable var hashValue: Int { return rawValue.hashValue } //MARK: Comparable public static func <(lhs: Car, rhs: Car) -> Bool { return lhs.rawValue < rhs.rawValue } }
protocol CoolCar { } extension CoolCar { static var Yellow : Car { return Car(rawValue: "Yellow") } } extension Car : CoolCar { }
let c1 = Car.Red switch c1 { case Car.Red: print("Car is red") case Car.Blue: print("Car is blue") case Car.Yellow: print("Car is yellow") default: print("Car is some other color") } if c1 == Car.Red { print("Equal") } if Car.Red > Car.Blue { print("Red is greater than Blue") }
请注意,该方法不能替代enum,仅在编译时不知道值时才使用此方法。