我正在努力寻找一个我找不到的简单解决方案。我想构建一个选择器,它显示标志并从另一个数组中选择语言代码。必须有一个简单的解决方案。长期以来,我用这个丑陋的 onChange
拐杖帮助自己。
有什么建议吗?
struct LanguageView: View {
@AppStorage ("language")var language: String = "de"
@State private var flag: String = ""
var languages = ["de", "en", "pl"]
var languageFlags = ["🇩🇪", "🇬🇧 🇺🇸", "🇵🇱" ]
var body: some View {
VStack{
HStack{
Picker("", selection: $flag) {
ForEach(languageFlags, id: \.self) {
Text($0)
.font(.caption2)
}
}
.pickerStyle(SegmentedPickerStyle())
}.onChange(of: flag, perform: { value in
if flag == "🇩🇪" {language = "de"}
if flag == "🇬🇧 🇺🇸" {language = "en"}
if flag == "🇵🇱" {language = "pl"}
})
}
.environment(\.locale, .init(identifier: language))
}
}
最佳答案
我认为这也是满足您需求的一个很好的答案,您应该像我一样定义自定义类型!用我的代码,选择的语言直接保存,你不用担心!我想说更安全。
import SwiftUI
struct ContentView: View {
var body: some View {
LanguageView()
}
}
struct Language: Hashable {
let language: String
let flag: String
}
let languageArray: [Language] = [Language(language: "de", flag: "🇩🇪"), Language(language: "en", flag: "🇬🇧 🇺🇸"), Language(language: "pl", flag: "🇵🇱")]
struct LanguageView: View {
@AppStorage ("language")var selectedFlag: Int = 0
var body: some View {
VStack{
HStack{
Picker("", selection: $selectedFlag) {
ForEach(languageArray.indices, id: \.self) { index in
Text(languageArray[index].flag)
.font(.caption2)
}
}
.pickerStyle(SegmentedPickerStyle())
}
.onAppear() { print("language is: " + languageArray[selectedFlag].language) }
.onChange(of: selectedFlag) { newValue in
print("language is: " + languageArray[newValue].language)
}
}
}
}
关于ios - ForEach 两个数组 - 可能有简单的解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66571706/