이번 글은 지난 글에 이어서ForEach문의 `\.self`, `\.id`의 의미에 대해 계속 알아보도록 하겠다. Swift의 KeyPath 문법에 대해 알아보자. Key Path 문법이란?KeyPath 문법의 형태를 보면 \.~~ 이런 식으로 작성되어 있는데 이는 컴퓨터에서 특정 경로를 표시할 때 본 적이 있을 것이다. 터미널에서도 특정 폴더로의 경로를 나타날때 백슬래시를 통해 표시하는 것을 볼 수 있다. 이와 마찬가지로 KeyPath는 어떤 특정한 타입이 가진 프로퍼티에 접근할 때 "경로를 통해서 접근"하는 것을 표현하는 방식이라고 볼 수 있다. 예를 들어 `User`라는 구조체가 있고, 그 안에 `name`이라는 String 타입의 변수가 있을 때 다음과 같이 접근할 수 있다는 뜻이다.`\User...
SwiftUI에서 ForEach를 통해 반복되는 UI를 구성할때 `id: \.self`나 `id: \.id`와 같은 코드를 본 적이 있을것이다.나는 이 코드의 의미에 대해 궁금해졌다. 이번 글에서는 SwiftUI의 Identity(동일성)에 대해 알아보고, 다음 글에서는 KeyPath에 대해 알아보도록 하겠다.SwiftUI의 IdentitySwiftUI가 뷰를 그리는 방식은 다음과 같다.`@State`등의 Source of Truth가 되는 프로퍼티가 변화하면 body 프로퍼티가 다시 렌더링 되면서 View가 다시 그려진다. 즉, `@State` 변수의 값이 변경되면 뷰가 해당 값을 반영한 형태로 다시 그려지는 것이다.그렇다면, 어떻게 같고 다른것을 구분할 수 있는 것일까? 이 때 등장하는 개념이 Ide..
SwiftUI에서 Stack을 사용할때 일반적인 VStack, HStack을 사용하기도 하며,Lazy라는 키워드가 붙은 LazyVStack, LazyHStack을 사용하기도 한다. 이번 글에서는 이 둘의 ScrollView 내부에서의 차이와, 메모리 관점에서의 차이에 대해 알아보도록 하겠다. ScrollView 내부에서의 차이VStack으로 다음과 같은 뷰를 구성했을때와, LazyVStack으로 구성했을 때 가장 먼저 느껴지는 차이는 "스크롤이 되는 영역"이 다르다는 것이다.struct Row: View { let id: Int var body: some View { Text("Row \(id)") } init(id: Int) { self.id..
이 글에서는 Apple Developer 사이트의 WWDC23 영상을 참고해 위젯에 애니메이션을 적용하는 방법과, Interactive Widget(상호 작용 위젯)을 만드는 법을 알아 볼 예정이다.영상은 크게 Ainmation과 Interactivity의 두 파트로 나눠져 있다. 해당 영상의 구성에 따라 글을 정리하겠다. Animation앱과 위젯의 차이일반적인 SwiftUI 앱withAnimation같은 모디파이어를 사용해서 State의 변경을 통해 애니메이션을 구동일반적인 SwiftUI 앱에서는 @State 변수를 이용해 View를 바꿀 수 있음위젯위젯에는 State가 없음대신 엔트리로 구성되는 타임라인을 생성: 엔트리는 특정 시간에 렌더링된 각기 다른 뷰와 대응하고, SwiftUI는 엔트리 간의 ..