如何指定具有组合类型 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 个错误:
- 非协议、非class类型'CustomStringConvertible.Type'不能在协议约束类型
中使用
- 非协议、非class类型'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'
我怎样才能形成这样一个有效的通用函数?
问题是 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)
}
我想要一个通用函数,它可以通过提供枚举类型和 Int
原始值来实例化我拥有的几种不同 enum
类型的对象。这些enum
也是CustomStringConvertible
。
我试过这个:
func myFunc(type: CustomStringConvertible.Type & RawRepresentable.Type, rawValue: Int)
导致 3 个错误:
- 非协议、非class类型'CustomStringConvertible.Type'不能在协议约束类型 中使用
- 非协议、非class类型'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'
我怎样才能形成这样一个有效的通用函数?
问题是 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)
}