MainのView。Defaultのホーム画面をTabViewで表示。

説明

L.2~8
タブの名称をenumで一覧化
L.10,12
@EnvironmentObjectを使用し、設定オブジェクト userS を共有監視する
@State で、どのタブを表示しているか監視を行う。デフォルトは、ホーム画面。
L.16
TabView の表示。selectionTabにbindingさせて選択されたタブが可能されるようにする
L.18~22
TabViewHome()が、Home画面のためのView。tabBar の画像を家の画像にして、名称をTabs.homeの値から現在の言語設定(userS.currentLanguage)に合わせて日英どちらかに変換して表示させる。Home画面のタブのtagは、Tabs.homeに設定
localized は、Stringをextensionで拡張した。Stringの値を設定に応じて日本語英語判定して戻す関数
       extension String {
           func localized(_ lang:String) ->String {
               let path = Bundle.main.path(forResource: lang, ofType: "lproj")
               let bundle = Bundle(path: path!)
               
               return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
           }
       }
    struct ContentView: View {
        enum Tabs: String {
            case home = "Home"
            case crypt = "Crypt"
            case pm = "PM"
            case cash = "Cash"
            case etc = "etc"
        }
        
        @EnvironmentObject var userS: UserData
        
        @State private var selectedTab: Tabs = .home
             
        var body: some View {
            //let _ = Self._printChanges()
            TabView(selection: $selectedTab) {
                // Home画面
                TabViewHome().tabItem {
                    Image(systemName: "house")
                    Text(Tabs.home.rawValue.localized(userS.currentLanguage))
                }
                .tag(Tabs.home)
                
                
                
                // 仮想通貨
    //            TabViewCrypt().tabItem {
    //                Image(systemName: "house")
    //                Text(Tabs.crypt.rawValue)
    //            }
    //            .tag(Tabs.crypt)
                
            }
            .environment(\.locale, .init(identifier: userS.currentLanguage))
        }
    
    }