FirstLaunchView.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | struct FirstLaunchView : View { @Environment (\. presentationMode ) private var mode var body : some View { Text ( "FirstLaunchView" ) . background ( Color . blue ) . onTapGesture { let generator = UINotificationFeedbackGenerator () generator . notificationOccurred (. success ) self . mode . wrappedValue . dismiss () UserDefaults . standard . setValue ( false , forKey : UserDefaultsKeyEnum . isFirstLaunch . rawValue ) } } } |
FirstLaunchViewModifier.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | struct FirstLaunchViewModifier : ViewModifier { @State var isFirstLaunch : Bool = UserDefaults . standard . value ( forKey : UserDefaultsKeyEnum . isFirstLaunch . rawValue ) as ? Bool ?? true func body ( content : Content ) - > some View { content . fullScreenCover ( isPresented : $ isFirstLaunch ) { FirstLaunchView () } } } extension View { func firstLaunchViewModifier () - > some View { self . modifier ( FirstLaunchViewModifier ()) } } |
Main.swift
1 2 3 4 5 6 7 8 9 10 11 | @main struct ddApp : App { var body : some Scene { WindowGroup { ContentView () . environmentObject ( HomeGlobal ()) . firstLaunchViewModifier () } } } |