提问人:Alexander Farber 提问时间:6/12/2021 更新时间:6/12/2021 访问量:728
如何更改菜单的标签?
How to change the label of a Menu?
问:
在 Github 上的一个简单的测试项目中,我尝试显示一个包含 3 种语言的菜单和允许用户选择本地化的标志:
struct ContentView: View {
// ...some Core Data related code skipped...
let labels = [
"en" : "🇺🇸 EN",
"de" : "🇩🇪 DE",
"ru" : "🇷🇺 RU"
]
@AppStorage("language") var language:String = "en"
var body: some View {
VStack(alignment: .trailing) {
Menu(language) {
Button("🇺🇸 EN", action: { language = "en" })
Button("🇩🇪 DE", action: { language = "de" })
Button("🇷🇺 RU", action: { language = "ru" })
}.padding()
List {
ForEach(topEntities) { top in
TopRow(topEntity: top)
}
}
}.environment(\.locale, .init(identifier: language))
}
}
上面的代码似乎工作正常,但有一个外观问题:菜单显示所选语言一个简单的字符串“en”(或“de”,或“ru”):
作为 Swift 和 SwiftUI 新手,我不明白如何将标签设置为更好的字符串,即选定的语言和标志,例如“🇺🇸 EN”。请帮忙
答:
2赞
George
6/12/2021
#1
你可以从字典中得到漂亮的字符串。这是工作版本:labels
Menu(labels[language] ?? "Unknown") {
Button("🇺🇸 EN", action: { language = "en" })
Button("🇩🇪 DE", action: { language = "de" })
Button("🇷🇺 RU", action: { language = "ru" })
}.padding()
我只是用.language
labels[language] ?? "Unknown"
评论
0赞
cedricbahirwe
6/12/2021
我认为从逻辑上讲,我们可以使用强制解包来确保你不会最终得到一种语言Menu(labels[language]!)
unknown
1赞
George
6/12/2021
@cedricbahirwe 理想情况下,它永远不应该是未知的。但是,由于我们无法保证它,因为语言被设置为字符串(并且可以设置任何字符串),我认为这会更安全一些。
评论