我想做这个或者类似的事情来获得相同的功能
有人能帮忙吗?
protocol FilterEnum: CaseIterable {
}
enum SomeFilterEnum: String, FilterEnum {
case owner = "Owner"
case karat = "Karat"
}
class SomeCls {
private let filterTypes: [FilterEnum]
init(filterTypes: [FilterEnum]){
self.filterTypes = filterTypes
}
func useFilterTypes() {
for type in filterTypes{
print(type.rawValue)
}
}
}
let sm = SomeCls(filterTypes: SomeFilterEnum.allCases)
最佳答案
从您的使用情况来看,您需要这个公共接口同时是CaseIterable
和RawRepresentable
。嗯,这是CaseIterable & RawRepresentable
,但我们不能直接将其用作类型,因为它们都有关联的类型。我们必须在SomeCls
上引入一个通用参数:
class SomeCls<T> where T : CaseIterable & RawRepresentable, T.RawValue == String {
private let filterTypes: [T]
init(filterTypes: [T]){
self.filterTypes = filterTypes
}
func useFilterTypes() {
for type in filterTypes{
print(type.rawValue)
}
}
}
关于swift - 如何为另一个类可以互换地使用的一组字符串枚举定义公共(public)接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57737866/