ios - ForEach 两个数组 - 可能有简单的解决方案吗?

标签 ios swift swiftui

我正在努力寻找一个我找不到的简单解决方案。我想构建一个选择器,它显示标志并从另一个数组中选择语言代码。必须有一个简单的解决方案。长期以来,我用这个丑陋的 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/

相关文章:

swift - VC 推送时线程 1 出错?

swiftui - 在 SwiftUI 中更改默认系统字体

cocoa-touch - 让 Objective-C 通过 UIWebView 与 JavaScript 对话

ios - 如何防止iTunes Connect上的应用程序名称丢失

ios - Xcode - 如何修复 'NSUnknownKeyException' ,原因 : … this class is not key value coding-compliant for the key X"error?

ios - checkbox的最佳使用方式——IOS swift

ios - ionic ios推送:无法在缓存中找到 token 错误Domain = com.google.iid代码= -25300“(空)”

ios - SWRevealViewController 推送到实际的导航 Controller

ios - 在 SwiftUI - Xcode 11 中设置 MKMap 的缩放级别

swiftui - 如何将图像垂直对齐到某些文本第一行的中心?