Tunko Development Diary

SwiftUI)@Environment 와 @EnvironmentObject 본문

Development/SwiftUI

SwiftUI)@Environment 와 @EnvironmentObject

Tunko 2022. 9. 29. 01:29

Apple Developer Documentation

@Environment 와 @EnvironmentObject 차이점

SwiftUI 는 @Environment와 @EnvironmentObject 속성래퍼를 모두 제공합니다.

@EnvironmentObject는 환경에 임의 값을 주입할 수 있는 반면

@Environment는 특히 Swift와 함께 작업하기 위해서 존재합니다.

Swift에서 사용하기 위해 미리 지정된 Key

@Environment 를 통해서 알 수 있는 정보는 디바이스가 다크모드인지 라이트모드인지 뷰가 렌더링되는 크기 클래스 등 시스템에서 제공하는 고정되어있는 속성에 접근이 가능합니다.

@Environment 핵심 데이터 관리 개체 컨텍스트와 같은 내용을 읽어내는 데 적합합니다.

반면에 @EnvironmentObject 는 특정 뷰내에서 읽기 위해 사용됩니다.

비슷하지만 Object가 붙은 만큼 레퍼런스타입의 객체를 전달합니다.

import SwiftUI

class EnvironmentClass : ObservableObject{
    @Published var name : String
    @Published var option : String
    init(name: String, option: String) {
        self.name = name
        self.option = option
    }
}

struct EnvironmentTest: View {
    @StateObject var envClass = EnvironmentClass(name: "Tunk", option: "😀")
    var body: some View {
        VStack{
            Text("EnvironmentTest")
            NextView()
                .environmentObject(envClass)
        }
    }
}

struct NextView : View {
    @EnvironmentObject var envClass : EnvironmentClass
    var body: some View {
        Text("NextView name :\\(envClass.name) option :\\(envClass.option)")
    }
}

EnvironmentClass 라는 클래스를 선언합니다.

그리고 EnvironmentTest 뷰에서 NextView 뷰를 사용할때 .environmentObject 수식어를 통해서 envClass 를 전달합니다.

NextView 뷰에서는 @EnvironmentObject var envClass : EnvironmentClass

이렇게 선언해서 전달 받은 envClass의 값을 가져와 사용할 수 있습니다.


@Environment

Apple Developer Documentation

앞서 설명한것처럼 @Environment는 Swift가 여러 유용한 속성을 이리 정해둔것입니다.

@Environment(\\.description) var description : String

을 출력해보면 각종 정의된 속성을 볼 수 있습니다.

이를 잘 활용하면 개발에 매우 유용하게 사용할 수 있습니다.

개인적으로 가장 많이 애용하는건 dismiss 입니다. 😀

EnvironmentPropertyKey<IsContentScrollViewManaged> = true, 
EnvironmentPropertyKey<ManagedBarAppearancesKey> = [], 
EnvironmentPropertyKey<ToolbarEnabledKey> = true, 
EnvironmentPropertyKey<NavigationObserverKey> = true, 
EnvironmentPropertyKey<EditModeKey> = Optional(SwiftUI.Binding<SwiftUI.EditMode>(transaction: SwiftUI.Transaction(plist: []), location: SwiftUI.StoredLocation<SwiftUI.EditMode>, _value: SwiftUI.EditMode.inactive)), 
EnvironmentPropertyKey<ResetFocusKey> = _ResetFocusAction(bridge: Optional(SwiftUI.FocusBridge)), 
EnvironmentPropertyKey<FocusBridgeKey> = WeakBox<FocusBridge>(base: Optional(SwiftUI.FocusBridge)), 
EnvironmentPropertyKey<ToolbarUpdateContextKey> = Optional(SwiftUI.Toolbar.UpdateContext(overrides: SwiftUI.HostingControllerOverrides(pushTarget: nil, navigation: nil, split: nil), navigationController: Optional(<SwiftUI.UIKitNavigationController: 0x10581d400>), targetController: Optional(<_TtGC7SwiftUI19UIHostingControllerVVS_19BridgedPresentation8RootView_: 0x109820800>), pointerBridgeParent: nil, horizontalSizeClass: SwiftUI.SizeClass.regular, verticalSizeClass: SwiftUI.SizeClass.regular, customLocations: [])), 
EnvironmentPropertyKey<SuppliedBridgesKey> = HostingControllerBridges(rawValue: 53), 
EnvironmentPropertyKey<SafeAreaTransitionStateKey> = Value(base: Optional(SwiftUI.ToolbarSafeAreaTransitionState)), 
EnvironmentPropertyKey<SuppliedBridgesKey> = HostingControllerBridges(rawValue: 52), 
EnvironmentPropertyKey<PrimaryBarColorScheme> = nil, 
EnvironmentPropertyKey<PrimaryBarBackgroundVisibilityKey> = hidden, 
EnvironmentPropertyKey<HostingControllerManagedBarsKey> = [], 
EnvironmentPropertyKey<NavigationEnabledKey> = enabled, 
EnvironmentPropertyKey<PresentationModeKey> = Binding<PresentationMode>(transaction: SwiftUI.Transaction(plist: []), location: SwiftUI.LocationBox<SwiftUI.FunctionalLocation<SwiftUI.PresentationMode>>, _value: SwiftUI.PresentationMode(isPresented: true)), 
EnvironmentPropertyKey<SuppliedBridgesKey> = HostingControllerBridges(rawValue: 36), 
EnvironmentPropertyKey<PresentationModeKey> = Binding<PresentationMode>(transaction: SwiftUI.Transaction(plist: []), location: SwiftUI.LocationBox<SwiftUI.UIKitPresentationModeLocation<SwiftUI.BridgedPresentation.RootView>>, _value: SwiftUI.PresentationMode(isPresented: true)), 
EnvironmentPropertyKey<AccentColorKey> = Optional(#0A84FFFF), 
EnvironmentPropertyKey<PreferenceBridgeKey> = Value(value: Optional(SwiftUI.PreferenceBridge)), 
EnvironmentPropertyKey<IsContentScrollViewManaged> = false, 
EnvironmentPropertyKey<ManagedBarAppearancesKey> = [SwiftUI.ToolbarPlacement.Role.bottomBar, SwiftUI.ToolbarPlacement.Role.navigationBar], 
EnvironmentPropertyKey<ToolbarEnabledKey> = false, 
EnvironmentPropertyKey<NavigationObserverKey> = false, 
EnvironmentPropertyKey<HostingControllerManagedBarsKey> = [SwiftUI.ToolbarPlacement.Role.bottomBar, SwiftUI.ToolbarPlacement.Role.navigationBar], 
EnvironmentPropertyKey<SuppliedBridgesKey> = HostingControllerBridges(rawValue: 32), 
EnvironmentPropertyKey<SceneStorageValuesKey> = Optional(SwiftUI.WeakBox<SwiftUI.SceneStorageValues>(base: Optional(SwiftUI.SceneStorageValues))), 
EnvironmentPropertyKey<StoreKey<SceneBridge>> = Optional(SceneBridge: rootViewController = Optional(<_TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier__: 0x106019600>)), 
EnvironmentPropertyKey<AppNavigationV3AuthorityKey> = Optional(SwiftUI.WeakBox<SwiftUI.AppNavigationV3Authority>(base: Optional(SwiftUI.AppNavigationV3Authority))), 
EnvironmentPropertyKey<EditModeKey> = Optional(SwiftUI.Binding<SwiftUI.EditMode>(transaction: SwiftUI.Transaction(plist: []), location: SwiftUI.StoredLocation<SwiftUI.EditMode>, _value: SwiftUI.EditMode.inactive)), 
EnvironmentPropertyKey<CanTakeFocusKey> = true, 
EnvironmentPropertyKey<InstalledInWindowKey> = true, 
EnvironmentPropertyKey<ResetFocusKey> = _ResetFocusAction(bridge: Optional(SwiftUI.FocusBridge)), 
EnvironmentPropertyKey<IsPlatformFocusSystemEnabled> = false, 
EnvironmentPropertyKey<IsFocusedKey> = false, 
EnvironmentPropertyKey<FocusBridgeKey> = WeakBox<FocusBridge>(base: Optional(SwiftUI.FocusBridge)), 
EnvironmentPropertyKey<ActiveContextMenuKey> = ViewIdentity(seed: 0), 
EnvironmentPropertyKey<ToolbarUpdateContextKey> = Optional(SwiftUI.Toolbar.UpdateContext(overrides: SwiftUI.HostingControllerOverrides(pushTarget: nil, navigation: nil, split: nil), navigationController: nil, targetController: Optional(<_TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier__: 0x106019600>), pointerBridgeParent: nil, horizontalSizeClass: SwiftUI.SizeClass.regular, verticalSizeClass: SwiftUI.SizeClass.regular, customLocations: [])), 
EnvironmentPropertyKey<SuppliedBridgesKey> = HostingControllerBridges(rawValue: 49), 
EnvironmentPropertyKey<InputAccessoryKey> = WeakBox<InputAccessoryGenerator<UIKitToolbar>>(base: nil), 
EnvironmentPropertyKey<SuppliedBridgesKey> = HostingControllerBridges(rawValue: 48), 
EnvironmentPropertyKey<HostingControllerManagedBarsKey> = [], 
EnvironmentPropertyKey<AlwaysOnInvalidationKey> = TimelineInvalidationAction(invalidate: (Function)), 
EnvironmentPropertyKey<AlwaysOnFrameSpecifier> = nil, 
EnvironmentPropertyKey<SuppliedBridgesKey> = HostingControllerBridges(rawValue: 32), 
EnvironmentPropertyKey<Key> = Optional(SwiftUI.NavigationV3Authority(host: Optional(<_TtGC7SwiftUI14_UIHostingViewGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier__: 0x10520a720; frame = (0 0; 375 812); autoresize = W+H; gestureRecognizers = <NSArray: 0x2826d4f00>; backgroundColor = <UIDynamicSystemColor: 0x283ddb7c0; name = systemBackgroundColor>; layer = <CALayer: 0x282898620>>))), 
EnvironmentPropertyKey<MultimodalListLayoutKey> = grid, 
EnvironmentPropertyKey<AdminModeEnabledKey> = false, 
EnvironmentPropertyKey<NavigationBarHostKey> = app, 
EnvironmentPropertyKey<PresentationModeKey> = Binding<PresentationMode>(transaction: SwiftUI.Transaction(plist: []), location: SwiftUI.LocationBox<SwiftUI.UIKitPresentationModeLocation<SwiftUI.ModifiedContent<SwiftUI.AnyView, SwiftUI.RootModifier>>>, _value: SwiftUI.PresentationMode(isPresented: false)), 
EnvironmentPropertyKey<AccessibilityRequestFocusKey> = AccessibilityRequestFocusAction(onAccessibilityFocus: nil), 
EnvironmentPropertyKey<AccentColorKey> = Optional(#0A84FFFF), 
EnvironmentPropertyKey<UndoManagerKey> = Optional(<NSUndoManager: 0x283dcb000>), 
EnvironmentPropertyKey<SceneSessionKey> = Optional(SwiftUI.WeakBox<__C.UISceneSession>(base: Optional(<UISceneSession: 0x283dcfe80; role: UIWindowSceneSessionRoleApplication; persistentIdentifier: B56E5E15-38D7-4C1E-A95B-9684EE30A5F0> {
    scene = <UIWindowScene: 0x105204ea0>;
    configuration = <UISceneConfiguration: 0x283dcfc40; name: 0x0; role: UIWindowSceneSessionRoleApplication> {
        sceneClass = 0x0;
        delegateClass = SwiftUI.AppSceneDelegate;
        storyboard = 0x0;
    };
}))), 
EnvironmentPropertyKey<SystemColorSchemeKey> = dark, 
EnvironmentPropertyKey<ExplicitPreferredColorSchemeKey> = nil, 
EnvironmentPropertyKey<AccessibilityQuickActionsKey> = false, 
EnvironmentPropertyKey<AccessibilityLargeContentViewerKey> = false, 
EnvironmentPropertyKey<EnabledTechnologiesKey> = AccessibilityTechnologies(technologySet: SwiftUI.(unknown context at $1b3fd73a8).AccessibilityTechnologySet(rawValue: 4)), 
EnvironmentPropertyKey<AccessibilityButtonShapesKey> = false, 
EnvironmentPropertyKey<AccessibilityPrefersCrossFadeTransitionsKey> = false, 
EnvironmentPropertyKey<AccessibilityInvertColorsKey> = false, 
EnvironmentPropertyKey<AccessibilityReduceMotionKey> = false, 
EnvironmentPropertyKey<AccessibilityReduceTransparencyKey> = false, 
EnvironmentPropertyKey<AccessibilityDifferentiateWithoutColorKey> = false, 
EnvironmentPropertyKey<DisplayCornerRadiusKey> = Optional(39.0), 
EnvironmentPropertyKey<BackgroundInfoKey> = BackgroundInfo(layer: 0, groupCount: 0), 
EnvironmentPropertyKey<VerticalUserInterfaceSizeClassKey> = Optional(SwiftUI.UserInterfaceSizeClass.regular), 
EnvironmentPropertyKey<HorizontalUserInterfaceSizeClassKey> = Optional(SwiftUI.UserInterfaceSizeClass.compact), 
EnvironmentPropertyKey<DisplayScaleKey> = 3.0, 
EnvironmentPropertyKey<ColorSchemeKey> = dark, 
EnvironmentPropertyKey<ColorSchemeContrastKey> = standard, 
EnvironmentPropertyKey<UpdateFidelityKey> = BLSUpdateFidelity(rawValue: 0), 
EnvironmentPropertyKey<ReducedLuminanceKey> = false, 
EnvironmentPropertyKey<DisplayGamutKey> = displayP3, 
EnvironmentPropertyKey<LegibilityWeightKey> = Optional(SwiftUI.LegibilityWeight.regular), 
EnvironmentPropertyKey<DynamicTypeSizeKey> = xSmall, 
EnvironmentPropertyKey<LayoutDirectionKey> = leftToRight, 
EnvironmentPropertyKey<SceneKeyboardShortcutsKey> = [:], 
EnvironmentPropertyKey<OpenWindowActionKey> = OpenWindowAction(strategy: Optional(SwiftUI.SceneNavigationStrategy_Phone())), 
EnvironmentPropertyKey<ScenePhaseKey> = active, 
EnvironmentPropertyKey<TimeZoneKey> = Asia/Seoul (fixed (equal to current)), 
EnvironmentPropertyKey<CalendarKey> = gregorian (current), 
EnvironmentPropertyKey<LocaleKey> = en_KR (current)]

접근성

[var accessibilityDifferentiateWithoutColor: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilitydifferentiatewithoutcolor>)

색상 없이 구분에 대한 시스템 기본 설정이 활성화되었는지 여부.

[var accessibilityEnabled: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityenabled>)

사용자가 보조 기술을 활성화했는지 여부를 나타내는 부울 값입니다.

[var accessibilityInvertColors: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityinvertcolors>)

색상 반전에 대한 시스템 기본 설정이 활성화되었는지 여부.

[var accessibilityLargeContentViewerEnabled: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilitylargecontentviewerenabled>)

대용량 콘텐츠 뷰어의 활성화 여부입니다.

[var accessibilityReduceMotion: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityreducemotion>)

모션 감소에 대한 시스템 기본 설정이 활성화되었는지 여부입니다.

[var accessibilityReduceTransparency: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityreducetransparency>)

투명도 줄이기에 대한 시스템 기본 설정이 활성화되었는지 여부.

[var accessibilityQuickActionsEnabled: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityquickactionsenabled>)

빠른 작업 기능이 활성화되었는지 여부를 나타내는 부울입니다.

[var accessibilityShowButtonShapes: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityshowbuttonshapes>)

버튼 모양 표시에 대한 시스템 기본 설정이 활성화되었는지 여부.

[var accessibilitySwitchControlEnabled: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityswitchcontrolenabled>)

스위치 제어 모터 접근성 기능이 사용 중인지 여부를 나타내는 부울 값입니다.

[var accessibilityVoiceOverEnabled: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityvoiceoverenabled>)

VoiceOver 화면 판독기가 사용 중인지 여부를 나타내는 부울 값입니다.

[var legibilityWeight: LegibilityWeight?] (<https://developer.apple.com/documentation/swiftui/environmentvalues/legibilityweight>)

텍스트에 적용할 글꼴 두께입니다.

행위

[var dismiss: DismissAction]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/dismiss>)

현재 프레젠테이션을 닫는 작업입니다.

[var dismissSearch: DismissSearchAction] (<https://developer.apple.com/documentation/swiftui/environmentvalues/dismisssearch>)

현재 검색 상호 작용을 종료하는 작업입니다.

[var newDocument: NewDocumentAction] (<https://developer.apple.com/documentation/swiftui/environmentvalues/newdocument>)

새 문서를 표시하는 작업입니다.

[var openDocument: OpenDocumentAction] (<https://developer.apple.com/documentation/swiftui/environmentvalues/opendocument>)

기존 문서를 표시하는 작업입니다.

[var openURL: OpenURLAction]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/openurl>)

URL을 여는 작업입니다.

[var openWindow: OpenWindowAction] (<https://developer.apple.com/documentation/swiftui/environmentvalues/openwindow>)

창을 표시하는 작업입니다.

[var refresh: RefreshAction?]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/refresh>)

보기 환경에 저장된 새로 고침 작업입니다.

[var rename: RenameAction?]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/rename>)

표준 이름 바꾸기 상호 작용을 활성화하는 작업입니다.

[var resetFocus: ResetFocusAction] (<https://developer.apple.com/documentation/swiftui/environmentvalues/resetfocus>)

포커스 시스템이 기본 포커스를 다시 평가하도록 요청하는 작업입니다.

컨트롤 및 입력

[var controlSize: ControlSize]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/controlsize>)

보기 내의 컨트롤에 적용할 크기입니다.

[var controlActiveState: ControlActiveState] (<https://developer.apple.com/documentation/swiftui/environmentvalues/controlactivestate>)

보기에 있는 컨트롤의 활성 상태입니다.

[var defaultWheelPickerItemHeight: CGFloat] (<https://developer.apple.com/documentation/swiftui/environmentvalues/defaultwheelpickeritemheight>)

날짜 선택기와 같은 휠 스타일 선택기에서 항목의 기본 높이입니다.

[var keyboardShortcut: KeyboardShortcut?] (<https://developer.apple.com/documentation/swiftui/environmentvalues/keyboardshortcut>)

이 환경의 버튼이 트리거되는 키보드 단축키입니다.

[var menuIndicatorVisibility: Visibility] (<https://developer.apple.com/documentation/swiftui/environmentvalues/menuindicatorvisibility>)

보기 내의 컨트롤에 적용할 메뉴 표시기 가시성입니다.

[var menuOrder: MenuOrder]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/menuorder>)

이 보기에서 표시되는 메뉴의 기본 항목 순서입니다.

[var searchSuggestionsPlacement: SearchSuggestionsPlacement] (<https://developer.apple.com/documentation/swiftui/environmentvalues/searchsuggestionsplacement>)

추천 검색어의 현재 위치입니다.

디스플레이 특성

[var colorScheme: ColorScheme] (<https://developer.apple.com/documentation/swiftui/environmentvalues/colorscheme>)

이 환경의 색 구성표입니다.

[var colorSchemeContrast: ColorSchemeContrast] (<https://developer.apple.com/documentation/swiftui/environmentvalues/colorschemecontrast>)

이 환경의 색 구성표와 관련된 대비입니다.

[var displayScale: CGFloat]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/displayscale>)

이 환경의 표시 배율입니다.

[var horizontalSizeClass: UserInterfaceSizeClass?] (<https://developer.apple.com/documentation/swiftui/environmentvalues/horizontalsizeclass>)

이 환경의 수평 크기 클래스입니다.

[var imageScale: Image.Scale]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/imagescale>)

이 환경의 이미지 스케일입니다.

[var pixelLength: CGFloat]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/pixellength>)

화면의 픽셀 크기입니다.

[var verticalSizeClass: UserInterfaceSizeClass?] (<https://developer.apple.com/documentation/swiftui/environmentvalues/verticalsizeclass>)

이 환경의 수직 크기 클래스입니다.

전역 개체

[var calendar: Calendar]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/calendar>)

날짜를 처리할 때 보기가 사용해야 하는 현재 달력입니다.

[var locale: Locale]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/locale>)

보기가 사용해야 하는 현재 로케일입니다.

[var managedObjectContext: NSManagedObjectContext] (<https://developer.apple.com/documentation/swiftui/environmentvalues/managedobjectcontext>)

[var timeZone: TimeZone]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/timezone>)

날짜를 처리할 때 보기가 사용해야 하는 현재 시간대입니다.

[var undoManager: UndoManager?] (<https://developer.apple.com/documentation/swiftui/environmentvalues/undomanager>)

보기의 실행 취소 작업을 등록하는 데 사용되는 실행 취소 관리자입니다.

스크롤링

[var isScrollEnabled: Bool]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/isscrollenabled>)

이 환경과 연결된 스크롤 보기가 스크롤을 허용하는지 여부를 나타내는 부울 값입니다.

[var horizontalScrollIndicatorVisibility: ScrollIndicatorVisibility] (<https://developer.apple.com/documentation/swiftui/environmentvalues/horizontalscrollindicatorvisibility>)

가로로 스크롤 가능한 콘텐츠의 스크롤 표시기에 적용할 가시성입니다.

[var verticalScrollIndicatorVisibility: ScrollIndicatorVisibility] (<https://developer.apple.com/documentation/swiftui/environmentvalues/verticalscrollindicatorvisibility>)

세로로 스크롤 가능한 콘텐츠의 스크롤 표시기에 적용할 가시성입니다.

[var scrollDismissesKeyboardMode: ScrollDismissesKeyboardMode] (<https://developer.apple.com/documentation/swiftui/environmentvalues/scrolldismisseskeyboardmode>)

스크롤 가능한 콘텐츠가 소프트웨어 키보드와 상호 작용하는 방식입니다.

상태

[var editMode: Binding?]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/editmode>)

사용자가 이 환경과 연관된 보기의 컨텐츠를 편집할 수 있는지 여부를 표시합니다.

[var isEnabled: Bool]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/isenabled>)

이 환경과 연결된 보기가 사용자 상호 작용을 허용하는지 여부를 나타내는 부울 값입니다.

[var isFocused: Bool]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/isfocused>)

가장 가까운 포커스 가능한 조상에 포커스가 있는지 여부를 반환합니다.

[var isLuminanceReduced: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/isluminancereduced>)

디스플레이 또는 환경에 현재 감소된 휘도가 필요한지 여부를 나타내는 부울 값입니다.

[var isPresented: Bool]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/ispresented>)

이 환경과 연결된 보기가 현재 표시되는지 여부를 나타내는 부울 값입니다.

[var isSearching: Bool]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/issearching>)

사용자가 검색할 때를 나타내는 부울 값입니다.

[var scenePhase: ScenePhase]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/scenephase>)

장면의 현재 단계입니다.

[var supportsMultipleWindows: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/supportsmultiplewindows>)

현재 플랫폼이 여러 창 열기를 지원하는지 여부를 나타내는 부울입니다.

스토어킷 구성

[var displayStoreKitMessage: DisplayMessageAction] (<https://developer.apple.com/documentation/swiftui/environmentvalues/displaystorekitmessage>)

[var requestReview: RequestReviewAction] (<https://developer.apple.com/documentation/swiftui/environmentvalues/requestreview>)

텍스트 스타일

[var allowsTightening: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/allowstightening>)

텍스트를 사용 가능한 공간에 맞추기 위해 문자 간 간격을 좁혀야 하는지 여부를 나타내는 부울 값입니다.

[var autocorrectionDisabled: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/autocorrectiondisabled>)

보기 계층 구조에 자동 수정이 활성화되어 있는지 여부를 결정하는 부울 값입니다.

[var dynamicTypeSize: DynamicTypeSize] (<https://developer.apple.com/documentation/swiftui/environmentvalues/dynamictypesize>)

현재 동적 유형 크기입니다.

[var font: Font?]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/font>)

이 환경의 기본 글꼴입니다.

[var layoutDirection: LayoutDirection] (<https://developer.apple.com/documentation/swiftui/environmentvalues/layoutdirection>)

현재 환경과 연결된 레이아웃 방향입니다.

[var lineLimit: Int?]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/linelimit>)

보기에서 텍스트가 차지할 수 있는 최대 줄 수입니다.

[var lineSpacing: CGFloat]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/linespacing>)

한 줄 조각의 맨 아래와 다음 조각의 맨 위 사이의 거리(포인트 단위)입니다.

[var minimumScaleFactor: CGFloat] (<https://developer.apple.com/documentation/swiftui/environmentvalues/minimumscalefactor>)

사용 가능한 공간에 텍스트를 맞추기 위해 글꼴 크기를 축소하기 위한 최소 허용 비율입니다.

[var multilineTextAlignment: TextAlignment] (<https://developer.apple.com/documentation/swiftui/environmentvalues/multilinetextalignment>)

내용이 줄 바꿈되거나 줄 바꿈이 포함될 때 텍스트 인스턴스가 줄을 정렬하는 방법을 나타내는 값입니다.

[var textCase: Text.Case?]

(<https://developer.apple.com/documentation/swiftui/environmentvalues/textcase>)

Text환경의 로케일을 사용하여 표시될 때 의 대소문자를 변환하는 스타일 재정의 입니다.

[var truncationMode: Text.TruncationMode] (<https://developer.apple.com/documentation/swiftui/environmentvalues/truncationmode>)

레이아웃이 사용 가능한 공간에 맞게 텍스트의 마지막 줄을 자르는 방법을 나타내는 값입니다.

속성 보기

[var backgroundMaterial: Material?] (<https://developer.apple.com/documentation/swiftui/environmentvalues/backgroundmaterial>)

현재 보기 아래에 있는 재료입니다.

[var backgroundStyle: AnyShapeStyle?] (<https://developer.apple.com/documentation/swiftui/environmentvalues/backgroundstyle>)

설정 시 기본 시스템 배경 스타일을 재정의하는 선택적 스타일입니다.

[var contentTransition: ContentTransition] (<https://developer.apple.com/documentation/swiftui/environmentvalues/contenttransition>)

보기의 내용에 애니메이션을 적용하는 현재 방법입니다.

[var contentTransitionAddsDrawingGroup: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/contenttransitionaddsdrawinggroup>)

콘텐츠 전환을 렌더링하는 보기가 GPU 가속 렌더링을 사용하는지 여부를 제어하는 부울 값입니다.

[var defaultMinListHeaderHeight: CGFloat?] (<https://developer.apple.com/documentation/swiftui/environmentvalues/defaultminlistheaderheight>)

목록에 있는 헤더의 기본 최소 높이입니다.

[var defaultMinListRowHeight: CGFloat] (<https://developer.apple.com/documentation/swiftui/environmentvalues/defaultminlistrowheight>)

목록에 있는 행의 기본 최소 높이입니다.

[var headerProminence: Prominence] (<https://developer.apple.com/documentation/swiftui/environmentvalues/headerprominence>)

보기 내 섹션 헤더에 적용할 중요도입니다.

[var redactionReasons: RedactionReasons] (<https://developer.apple.com/documentation/swiftui/environmentvalues/redactionreasons>)

보기 계층 구조에 적용된 현재 수정 이유입니다.

[var symbolRenderingMode: SymbolRenderingMode?] (<https://developer.apple.com/documentation/swiftui/environmentvalues/symbolrenderingmode>)

현재 심볼 렌더링 모드 또는 nil현재 이미지와 전경 스타일을 매개변수로 사용하여 모드가 자동으로 선택됨을 나타냅니다.

[var symbolVariants: SymbolVariants] (<https://developer.apple.com/documentation/swiftui/environmentvalues/symbolvariants>)

이 환경에서 사용할 기호 변형입니다.

위젯

[var showsWidgetLabel: Bool] (<https://developer.apple.com/documentation/swiftui/environmentvalues/showswidgetlabel>)

액세서리 제품군 위젯이 액세서리 레이블을 표시할 수 있는지 여부를 나타내는 부울 값입니다.

[var widgetFamily: WidgetFamily] (<https://developer.apple.com/documentation/swiftui/environmentvalues/widgetfamily>)

위젯 템플릿 - 소형, 중형 또는 대형.

[var widgetRenderingMode: WidgetRenderingMode] (<https://developer.apple.com/documentation/swiftui/environmentvalues/widgetrenderingmode>)

시스템에서 위젯을 표시하는 위치를 기반으로 하는 위젯의 렌더링 모드입니다.

요약

@EnvironmentObject 는 직접 전달해준 객체를 받아 사용할때 사용

@Environment 는 Swift내부에 이미 선언되어있는 각종 유용한 속성값을 가져와 사용

반응형
Comments