如何指定具有组合类型 CustomStringConvertible 和 RawRepresentable 的函数参数的类型?

How to specify the type of a function parameter with combined type CustomStringConvertible and RawRepresentable?

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

我试过这个:

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

导致 3 个错误:

暂时忘记“CustomStringConvertible”,我也尝试过:

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

但是,尽管代码完成提示它,但会导致有关 T.init(rawValue:):

的错误

我怎样才能形成这样一个有效的通用函数?

问题是 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)
}