AC/ContentView
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))
}
}