我想做这个或类似的事情来获得相同的功能 有人可以帮忙吗?
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)
最佳答案
从你的用法来看,你需要这个通用接口(interface)既是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/