当前位置: 首页 > 面试题库 >

使用协议将案例添加到现有枚举

凌钊
2023-03-14
问题内容

我想创建一个protocol在所有enums符合此条件的情况下强制执行某种情况的方法protocol

例如,如果我有一个enum这样的:

enum Foo{
    case bar(baz: String)
    case baz(bar: String)
}

我想用扩展它protocol,增加另一种情况:

case Fuzz(Int)

这可能吗?


问题答案:

解决方法是使用struct带有static变量的a。

注意:这是在 Swift 3 中完成的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,仅在编译时不知道值时才使用此方法。



 类似资料:
  • 在Scapy中添加新的协议(或者是更加的高级:新的协议层)是非常容易的。所有的魔法都在字段中,如果你需要的字段已经有了,你就不必对这个协议太伤脑筋,几分钟就能搞定了。 简单的例子 每一个协议层都是Packet类的子类。协议层背后所有逻辑的操作都是被Packet类和继承的类所处理的。一个简单的协议层是被一系列的字段构成,他们关联在一起组成了协议层,解析时拆分成一个一个的字符串。这些字段都包含在名为f

  • 据我所知,协议缓冲区主要用于控制服务器和客户端代码的项目。我的一般问题是——协议缓冲区能否用于将二进制消息序列化/反序列化到使用现有协议的服务器?所以,我的问题: > 如果协议缓冲区不支持本机微调现有协议的序列化/反序列化方式,那么可以通过扩展添加该功能吗?是否可以以某种方式添加序列化/反序列化方法可以识别的关键字?也许这可以通过扩展或修改protobuf csharp port或protobuf

  • 有人能告诉我如何让protoc生成带前导库指令的dart文件吗? 我正在使用dart-proc-plugin(v0.10.2)从proto文件生成我的dart、c、c#、js和java模型。我的印象是没有办法让proc在生成的dart文件中添加“库”指令,直到我注意到该指令出现在另一个项目中(参见date.pb.dart)。 如果我使用相同的文件(date.proto),我无法让protoc生成包

  • 我经常挠头的情况下,让我们说我有一个通用的类在一个pod中,可以处理权限,在应用程序中,我希望能够扩展它来创建更有意义的方法名称,也就是使用枚举作为参数,使其使用更清晰,更不容易出错。 但在别处创建扩展时,似乎不能调用private方法。 我相信会有更干净的方法,或者我的模式是错误的... 以下是它的简化版本: 外部pod中的类: 以及应用程序中的扩展: 澄清: 是Pod中的一个类,仅用于检查在使

  • 问题内容: 我试图将Integration Services添加到现有的SQL Server 2008实例中。 我去了SQL Server安装中心,然后单击“新安装或向现有安装添加功能”选项。此时,将弹出一个文件系统窗口。我被要求浏览以查找SQL Server 2008 R2安装介质。 我尝试使用 C:Program Files \ MicrosoftSQLServer, 但收到错误消息,该错误消

  • 我有一个现有的Solr设置,运行在一个独立的Solr实例上。我被要求为此设置添加弹性和高可用性。因此,我想将复制添加到我的设置中,我认为SolrCloud是一种方式? 我已经在SolrCloud wiki上浏览了演示。然而,我不确定如何将现有的Solr实例添加到ZooKeeper,然后再添加一些节点以供复制。这是否可以不重新膨胀? 维基上说 注意:如果不使用示例启动solr,请确保在创建集合之前将