我正在创建一个包装字典的自定义集合。
此集合应确定何时获取原始类型为string / int的枚举,如果是,则它将自动从中提取“ rawValue”。

我的下标之一应处理以下情况:下标的键为String类型,值为Enum case
例如:

dict["userEvent"] = Event.tap


我试过了 :

subscript<Index: ExpressibleByStringLiteral>(index: Index) -> Value? where Value == RawRepresentable {
    get {
        return self.elements[index as! Key]
    }
    set {
        self.elements[index as! Key] = newValue?.rawValue
    }
}


但是我遇到以下错误:


  协议“ RawRepresentable”只能用作一般约束
  因为它具有自我或相关类型要求





  成员'rawValue'不能用于协议类型'RawRepresentable'的值;改用一般约束


我如何实现在设置新值时自动解开枚举大小写的下标?

最佳答案

RawRepresentable具有通用约束。您可以做的是将“返回”类型添加为下标的一般约束中的另一个参数。像这样:

subscript<Index: ExpressibleByStringLiteral, Return: RawRepresentable>(index: Index) -> Return?

但是我不确定这种配置是否会起作用。这个字典包装器是Dictionary的独特子类还是Dictionary的扩展?

关于ios - 如何创建处理RawRepresentable值的自定义集合下标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58076271/

10-12 22:27