0

enum我想要一个通用函数,它可以通过提供枚举类型和Int原始值来实例化我拥有的几种不同类型的对象。这些enums 也是CustomStringConvertible.

我试过这个:

func myFunc(type: CustomStringConvertible.Type & RawRepresentable.Type, rawValue: Int)

这导致3个错误:

  • 非协议、非类类型“CustomStringConvertible.Type”不能在协议约束类型中使用
  • 非协议、非类类型“RawRepresentable.Type”不能在协议约束类型中使用
  • 协议“RawRepresentable”只能用作通用约束,因为它具有 Self 或关联的类型要求

现在忘记'CustomStringConvertible',我也试过:

private func myFunc<T: RawRepresentable>(rawValue: Int, skipList: [T]) {
    let thing = T.init(rawValue: rawValue)
}

但是,尽管代码完成表明了这一点,但会导致有关以下内容的错误T.init(rawValue:)

  • 无法使用类型为“(rawValue:Int)”的参数列表调用“init”

我怎样才能形成这样的工作通用功能?

4

1 回答 1

2

问题在于,这T.RawValue可能Int与您当前的类型约束不同。您需要指定T.RawValue == Int以将rawValue: Int输入参数传递给init(rawValue:).

func myFunc<T: RawRepresentable & CustomStringConvertible>(rawValue: Int, skipList: [T]) where T.RawValue == Int {
    let thing = T.init(rawValue: rawValue)
}
于 2020-03-27T10:30:01.610 回答