我想要进行一次现代语言更改,但我不知道如何重新启动应用程序,或者更确切地说,我知道,但对我来说,它的工作有一个错误,而不是我想要的方式.在其他应用程序中,我看到语言在不离开应用程序的情况下更新,滑块只是旋转,就是这样,语言被替换了.如何在SwiftUI中实现这一点?
下面是我运行应用程序的方式:
import SwiftUI
@main
struct MyApp_UkraineApp: App {
@StateObject var appSettings = AppSettings()
var body: some Scene {
WindowGroup {
MainMenuView()
.environmentObject(appSettings)
}
}
}
这就是我改变语言的方式:
import SwiftUI
struct MainMenuView: View {
@EnvironmentObject private var appSettings: AppSettings
var body: some View {
HStack {
Button("Ukraine") {
Language.selected = .ukraine
resetApp()
}
Button("English") {
Language.selected = .english
resetApp()
}
}
func resetApp() {
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
if let windowSceneDelegate = scene.delegate as? UIWindowSceneDelegate {
windowSceneDelegate.window??.rootViewController = UIHostingController(rootView: MainMenuView())
}
}
}
}
}
enum Language: String, CaseIterable {
case english, ukraine
var code: String {
switch self {
case .english: return "en"
case .ukraine: return "uk"
}
}
static var selected: Language {
set {
UserDefaults.standard.set([newValue.code], forKey: "AppleLanguages")
UserDefaults.standard.set(newValue.rawValue, forKey: "language")
}
get {
return Language(rawValue: UserDefaults.standard.string(forKey: "language") ?? "") ?? .english
}
}
static func switchLanguageBetweenEnglishAndGerman() {
selected = selected == .english ? .ukraine : .english
}
}
我收到这个错误,我知道它为什么会出现,但我不知道如何修复它:
线程1:致命错误:找不到AppSetting类型的ObservableObject.可能缺少作为此视图的上级的AppSetting的View.Environmental对象(_:).
但主要的问题是,如何确保在不重新启动应用程序的情况下进行现代语言更新?