具有泛型枚举的Swift结构属性
我目前正在创建设置页面。我正在尝试将枚举动态分配到我的struct属性中。 我想要实现的是,无论何时调用Settings struct,它都会自动将所有相应的设置附加在一起。下面是枚举具有泛型枚举的Swift结构属性,swift,enums,Swift,Enums,我目前正在创建设置页面。我正在尝试将枚举动态分配到我的struct属性中。 我想要实现的是,无论何时调用Settings struct,它都会自动将所有相应的设置附加在一起。下面是枚举 protocol BaseSettings {} enum SettingsCategory: String, CaseIterable { case sales = "Sales" case payment = "Payment" } struct SettingsSection {
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枚举时,我已经可以强制转换它了:)。非常感谢!