Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有泛型枚举的Swift结构属性_Swift_Enums - Fatal编程技术网

具有泛型枚举的Swift结构属性

具有泛型枚举的Swift结构属性,swift,enums,Swift,Enums,我目前正在创建设置页面。我正在尝试将枚举动态分配到我的struct属性中。 我想要实现的是,无论何时调用Settings struct,它都会自动将所有相应的设置附加在一起。下面是枚举 protocol BaseSettings {} enum SettingsCategory: String, CaseIterable { case sales = "Sales" case payment = "Payment" } struct SettingsSection {

我目前正在创建设置页面。我正在尝试将枚举动态分配到我的struct属性中。 我想要实现的是,无论何时调用Settings struct,它都会自动将所有相应的设置附加在一起。下面是枚举

protocol BaseSettings {}

enum SettingsCategory: String, CaseIterable {
    case sales = "Sales"
    case payment = "Payment"
}

struct SettingsSection {
    var settingsNameArray: [BaseSettings]
    var settingsCategoryName: SettingsCategory

    init(settingsCategory: SettingsCategory) {
        self.settingsCategoryName = settingsCategory

        switch settingsCategory {
        case .sales:
            self.settingsNameArray = SalesSettings.allCases
        case .payment:
            self.settingsNameArray = PaymentSettings.allCases
        }
    }
}

struct Settings {
    var sections = [SettingsSection]()

    init() {
        for eachSettingCategory in SettingsCategory.allCases {
            self.sections.append(SettingsSection(settingsCategory: eachSettingCategory))
        }
    }
}

enum SalesSettings: String, BaseSettings, CaseIterable {
    case testSettings = "Test Sales Settings"
}

enum PaymentSettings: String, BaseSettings, CaseIterable {
    case testSettings = "Test Payment Settings"
}
以上代码工作正常。设置按节分组。然而,当我想要填充每个枚举案例的字符串原始值时,我面临一个问题。我无法获取rawValue,因为协议BaseSettings不是枚举

 let settingsDataSource = SettingsConstant.Settings()
 let settingsName = settingsDataSource.sections[indexPath.section].settingsNameArray[indexPath.row]
    cell.textLabel?.text = "\(settingsName)"
tableView不显示每个枚举案例的rawValue,而是显示每个枚举案例

如何修复此数据结构?有人能指引我吗


谢谢

在协议声明中指定需要原始值

protocol BaseSettings {
    var rawValue: String { get }
}

诸如
SalesSettings
之类的枚举将自动符合此新要求,因为当
rawValue
String
时,它与
RawRepresentable.rawValue
完全相同!是的,它有效!如果说enum SalesSettings有一个getter属性,我如何访问它?希望您能帮助我:)@alvinWB您首先需要确保
BaseSettings
的实例实际上是
SalesSettings
的实例:
如果让ss=setingsname as?SalesSettings{/*在此处访问“ss.yourProperty”*/}
但是如果没有更多信息,我的建议可能不是最好的。我建议您发布一个新问题,提供更多信息。谢谢先生的帮助!以前XCode不允许我将其强制转换为SalesSettings。这似乎是因为我将SalesSettings放在了一个枚举中。当我从包装器枚举中删除SalesSettings枚举时,我已经可以强制转换它了:)。非常感谢!