텍스트 입력하고 표시할 수 있는 componetmodifiers를 통해 components의 여러 속성들을 추가 및 변경할 수 있다.modifiers를 통해 text의 다양한 속성을 추가할 수 있다..font modifier를 통해 시스템 폰트를 활용할 수 있다.크기
여러가지 모양의 도형을 생성할 수 있는 componentmodifiers를 통해 shape의 다양한 속성을 추가할 수 있다.shape의 모든 종류는 관련된 modifiers를 동일하게 적용할 수 있다.
Components의 색상을 변경시스템에서 미리 지정된 색상을 사용할 수 있다.원하는 색상을 미리 지정하고 색상 이름으로 적용할 수 있다.Assets 폴더의 새로운 Color Set 추가 및 이름 지정inspector에서 Appearance별 색상 지정(디스플레이 모드
Component의 색상을 그라디언트로 변경선형 그라디언트를 추가할 수 있다.원형 그라디언트를 추가할 수 있다.회전형 그라디언트를 추가할 수 있다.
Image를 이용해 원하는 아이콘 생성Apple의 SF Symbols를 활용해 기본 시스템 아이콘을 사용할 수 있다.SF Symbols의 아이콘 이름을 systemName으로 입력하여 사용할 수 있다.SF Symbols (https://developer.app
이미지를 추가할 수 있는 뷰이미지를 frame을 기준으로 사이즈를 조정할 수 있다.원본 이미지 비율을 유지하면서 이미지 사이즈를 조정할 수 있다.업로드중..업로드중..이미지를 원하는 모양으로 클리핑 마스크를 씌울 수 있다.이미지의 불투명 영역의 색상을 임의로 변경할 수
화면의 여러 요소들을 감싸는 사각형의 영역frame 영역을 지정해주지 않으면 콘텐츠 자체가 차지하는 영역이 기본 영역이다.frame 영역을 지정해주면 지정해준 넓이만큼 화면의 공간을 차지하게된다.frame 영역을 기준으로 frame 내부의 요소들을 정렬할 수 있다.fr
요소 뒷면 혹은 앞면에 다양한 요소를 추가할 수 있는 modifier요소 뒷면에 다양한 요소들을 추가할 수 있다.여러개를 복수로 추가할 수 있다.(Overlays도 동일)요소 앞면에 다양한 요소들을 추가할 수 있다.Overlay안의 요소에 Overlay를 추가할 수 있
한 개 이상의 뷰를 묶어서 배치한 개 이상의 뷰를 수평 방향으로 배치할 수 있다.수직 방향으로 정렬할 수 있다.뷰간의 간격을 조절할 수 있다.(기본값 8)한 개 이상의 뷰를 수직 방향으로 배치할 수 있다.수평 방향으로 정렬할 수 있다.뷰간의 간격을 조절할 수 있다.(기
뷰 자체 혹은 뷰 간의 여백 추가뷰 자체의 수직, 수평 방향으로 여백을 추가 할 수 있다.Stack뷰 안에 여백(빈 공간)을 추가할 수 있다.Spacer는 크기는 유동적으로 조정되며, 가능한 많은 공간을 차지한다.minLength 파라미터를 통해 최소 여백을 설정할 수
뷰 내부에 변수를 생성하고, Enum을 활용하여 초기화하여 뷰의 재사용성 향상뷰(구조체)의 재사용성을 높이기 위해 title, backgroundColor이라는 변수(프로퍼티)를 생성한다.생성한 프로퍼티에 기본값을 할당한다.프로퍼티 기본값을 지정하지 않을 경우, 이니셜
한 개 이상의 뷰를 반복할 수 있는 뷰반복할 범위(횟수)를 지정해주고 반복할 뷰를 작성하여 원하는 만큼 뷰를 반복한다.Array를 활용하여 반복할 횟수와 반복할 데이터를 전달합니다..indices는 컬렉션의 인덱스 범위를 나타내는 Range<Int>를 반환한다.
내부의 여러 뷰들을 스크롤 가능하게 담는 뷰ScrollView는 기본적으로 수직 방향이다.VStack, ForEach를 활용하여 반복되는 동일한 뷰를 표현할 수 있다.axes 파라미터를 전달하여 ScrollView를 수평 방형으로 변경할 수 있다.showsIndicat
LazyStack 스택 내의 아이템들이 화면에 렌더링 될 때 생성 LazyV(H)Stack 일반 Stack뷰의 경우 화면에 나타나기 전 모든 데이터를 로드하지만, LazyStack뷰의 경우 화면에 나타난 후에 데이터를 로드한다.
값의 변화를 추적하고 해당 값이 변경될 때마다 뷰를 자동으로 업데이트하는 프로퍼티 래퍼Struct에서만 사용되며, 선언된 변수의 값을 관찰하고 값의 변화가 있을 때 해당 뷰를 업데이트 한다.뷰의 body에서만 접근해야되기 때문에 private으로 선언하는 것을 권장한다
데이터의 값을 변경하고 다른 뷰와 동기화하는 프로퍼티 래퍼(property wrapper)@State에서 저장된 뷰의 상태를 다른 뷰와 공유하고 변경할 수 있게 한다.@State는 값이 변경될 때 뷰를 다시 그리고, @Binding은 값이 변경될 때 뷰 간의 데이터를
조건문을 사용하여 뷰의 내용을 동적으로 결정if 혹은 else if 뒤의 조건이 true일 경우 해당 코드를 실행하고 그렇지 않다면(false)일 경우 else의 코드가 실행된다.조건식에는 Bool타입의 값만 들어와야 한다.현재 조건에 따라 어떤 코드를 실행할 지 결정
데이터를 목록 형태로 보여주는 뷰List 생성자에 뷰를 전달하면, 뷰 하나의 row 하나씩 표현한다.id로 식별할 수 있는 데이터를 받아 ForEach를 활용하여 동적으로 뷰를 생성할 수 있다.Section을 활용하여 List 내의 데이터를 그룹핑하고 header와 f
사용자에게 경고, 에러, 성공 등과 같은 메시지를 전달하고 확인 및 선택을 요청하는 뷰Alert 메시지를 표시하고, 사용자는 메시지를 확인할 수 있다.Alert 메시지를 표시하고, 사용자는 다음 액션에 대해 선택할 수 있다.primaryButton는 주 버튼으로 설정되
사용자에게 선택지를 제공하는 팝업 형태의 뷰iOS 14를 끝으로 더이상 사용되지 않지만, iOS 13과 14를 지원하기 위해서는 ActionSheet로 구현해야한다.일반적으로 두 개 이상의 선택지가 있고, 사용자가 선택을 하면 ActionSheet는 사라지고 해당 액션
onAppear, onDisappear 뷰가 나타나거나 사라질 때 입력된 코드를 실행 onAppear 뷰가 화면 상에 나타날 때 입력된 코드를 실행한다.
뷰가 화면에서 등장하거나 사라질 때의 전환 효과먼저 뷰에 애니메이션을 적용시킨 후, 조건문을 활용하여 뷰에 전환 효과를 적용시킬 수 있다.AnyTransition의 다양한 전환 효과를 적용시킬 수 있다.asymmetric을 활용하여 등장과 퇴장할 때의 전환 효과를 다르
뷰에 탭 제스처를 설정하여 사용자가 화면을 탭 했을 때 설정한 코드 실행사용자가 특정 뷰를 탭하면 실행할 코드를 지정하여, 제스처가 인식되면 지정된 코드 블럭을 실행한다.일반 버튼과 다르게 뷰가 탭 됐을 때 하이라이트 되지 않는다.count 파라미터를 통해 인식될 탭
사용자 설정과 같은 간단한 데이터를 저장하고 검색할 수 있는 프로퍼티 래퍼앱의 설정 데이터, 사용자 기본값 같은 간단한 상태 정보 등을 저장하고 검색하는 데 사용되는 인터페이스이다.key-value 형식으로 데이터를 저장하며, 각 데이터 항목에는 유일한 키와 해당 데이
NavigationStack 화면 간의 이동과 탐색 기록을 관리하는 데 사용되는 스택(stack) 개념의 컨테이너 뷰 NavigationLink 다른 화면으로 이동하며 네비게이션 스택에 새로운 뷰를 푸시(push)하고 이전 뷰로 돌아갈 수 있는 탐색 기능을 제공한다.
스크롤 뷰의 위치를 제어하고 특정 뷰로 스크롤 할 수 있는 뷰일반적으로 ScrollView 내부의 포함되는 뷰의 식별자를 사용하여 특정 뷰로 스크롤할 수 있다.id값을 지정하여 해당 위치의 뷰로 스크롤할 수 있고, anchor를 통해 스크롤된 뷰의 위치를 지정할 수 있
GeometryReader 부모 뷰의 크기 및 좌표 시스템을 활용하여 하위 뷰의 레이아웃과 위치를 제어할 수 있는 컨테이너 뷰 UIScreen UIScreen을 활용하여 화면의 너비에 따라 레이아웃이나 위치를 지정할 수 있지만, Landscape모드 등 유동적으로 적
Struct를 활용하여 사용자 인터페이스를 작성하는 데에 필요한 데이터 모델을 관리Array 형식으로 동일한 타입의 데이터를 선형적으로(순서대로) 정리할 수 있다.index를 통해 개별 요소에 접근할 수 있다.struct 형식으로 여러가지 타입의 데이터를 캡슐화하여 정
@ObservableObject, @StateObject 외부 객체의 상태를 관찰하고 업데이트할 수 있는 프로퍼티 래퍼 코드 분리의 필요성 코드의 양이 많아지고 복잡해짐에 따라 협업과 유지보수, 확장성 측면에서 코드를 분리하여 관리해야 한다. 코드의 각 목적에 따라
앱 전역에서 공유되는 객체 데이터를 설정할 수 있는 프로퍼티 래퍼ObservableObject를 채택한 객체 데이터를 @StateObject와 @ObservedObject를 통해 뷰 간에 공유할 수 있다.하지만 이 방법은 직접적으로 데이터를 사용하지 않더라도 전달만을
데이터의 흐름을 관찰하고 반응하는 데에 주로 사용되며, 변화하는 데이터를 생성하고 해당 데이터에 대한 응답을 처리Publisher는 데이터 스트림을 생성하는 타입으로, 특정 데이터 소스에서 새로운 값이나 이벤트를 발생시킬 수 있다.Subscriber는 Publisher
presentationDetents를 이용해 sheet의 사이즈 조정presentationDetents를 이용하여 원하는 크기로 sheet의 사이즈를 조정할 수 있다.사용자가 조정 가능한 사이즈의 범위를 set 형태로 지정한다.가능한 사이즈의 범위가 2개 이상일 경우
디바이스 화면 SafeArea에 콘텐츠 뷰 추가디바이스 화면의 가장자리 등 SafeArea에 여백을 추가하여 뷰를 배치할 수 있다.navigationTitle이 존재하는 상황에서 상단에 뷰를 추가할 경우, navigationTitle 영역을 포함한다.그러나 추가하는 뷰
서로 다른 두 뷰 사이에 애니메이션 효과를 줄 수 있는 기능일반적인 애니메이션 효과는 단일 뷰의 변화를 감지하여 그 변화에 애니메이션을 적용한다.matchedGeometryEffect를 이용하여 두 뷰 사이의 변화에 애니메이션 효과를 적용할 수 있다.matchedGeo
UIViewRepresentable UIKit의 UIView를 SwiftUI 뷰로 래핑하기 위한 프로토콜 UIViewRepresentable Protocol SwiftUI는 기본적으로 UIKit을 대체하는 새로운 프레임워크이지만, UIKit에서 제공하는 커스텀 뷰를