I’d like to have a function that can take both enum A and enum B and display the raw values in a menu. so i use type T to make the function generic, and T follows the localized protocol i defined so that the value can be localized. below is my code which compiles but doesn’t show any of the string literals in my string catalog. i have other kinds of localized string work well.
please let me know what’s wrong with the code?
<code>protocol StringEnumLocalizable {
func localizedString() -> LocalizedStringKey
}
enum A: String, CaseIterable, Codable, StringEnumLocalizable {
case a1 = "a1"
case a2 = "a2"
func localizedString() -> LocalizedStringKey {
return LocalizedStringKey(self.rawValue)
}
}
enum B: String, CaseIterable, Codable, StringEnumLocalizable {
case b1 = "a1"
case b2 = "a2"
func localizedString() -> LocalizedStringKey {
return LocalizedStringKey(self.rawValue)
}
}
private func customMultiSelectionsView<T: StringEnumLocalizable>(
options: [T]
) -> some View {
Menu {
ForEach(options, id: .self) { option in
Text(option.localizedString())
}
}
</code>
<code>protocol StringEnumLocalizable {
func localizedString() -> LocalizedStringKey
}
enum A: String, CaseIterable, Codable, StringEnumLocalizable {
case a1 = "a1"
case a2 = "a2"
func localizedString() -> LocalizedStringKey {
return LocalizedStringKey(self.rawValue)
}
}
enum B: String, CaseIterable, Codable, StringEnumLocalizable {
case b1 = "a1"
case b2 = "a2"
func localizedString() -> LocalizedStringKey {
return LocalizedStringKey(self.rawValue)
}
}
private func customMultiSelectionsView<T: StringEnumLocalizable>(
options: [T]
) -> some View {
Menu {
ForEach(options, id: .self) { option in
Text(option.localizedString())
}
}
</code>
protocol StringEnumLocalizable {
func localizedString() -> LocalizedStringKey
}
enum A: String, CaseIterable, Codable, StringEnumLocalizable {
case a1 = "a1"
case a2 = "a2"
func localizedString() -> LocalizedStringKey {
return LocalizedStringKey(self.rawValue)
}
}
enum B: String, CaseIterable, Codable, StringEnumLocalizable {
case b1 = "a1"
case b2 = "a2"
func localizedString() -> LocalizedStringKey {
return LocalizedStringKey(self.rawValue)
}
}
private func customMultiSelectionsView<T: StringEnumLocalizable>(
options: [T]
) -> some View {
Menu {
ForEach(options, id: .self) { option in
Text(option.localizedString())
}
}