我想做这个或者类似的事情来获得相同的功能
有人能帮忙吗?

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)

最佳答案

从您的使用情况来看,您需要这个公共接口同时是CaseIterableRawRepresentable。嗯,这是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/

10-10 16:32