일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ios
- 야곰 # 야곰아카데미커리어스타터캠프 #iOS개발자 # 부트캠프
- modern concurrency
- SWIFT
- APNS
- WWDC
- 티스토리챌린지
- modern concurrency deep dive
- 오블완
- Today
- Total
Geon
Demystify SwiftUI 본문
SwiftUI는 선언형 UI
SwiftUI의 뒤에서 뭐가 이루어지는지를 알아야한다.
SwiftUI가 코드를 볼때 무엇을 보는가 ->
Identity
- 앱의 여러 업데이트에서 요소를 동일하거나 별개로 인식하는 방법
- Identity란 동일한지 판별하는 요소
Explict Identity(명시적인 신원)
- 같은 이름이나 식별자를 할당하는것
- 누군가 계속 추적해야함
- ForEach 에서 \.ID. 값을 쓰면 어떤것이 바뀌어야하는지 명확히 SwiftUI 가 알수 있다.
SwiftUI는 포인터가 없다
Strucural identity(구조적 정체성)
- SwiftUI는 뷰 계층 구조를 사용하여 뷰에 대한 암시적 ID를 생성한다
분기처리시 다른 뷰라고 인식한다.
as - ls
if keyword == "abc" {
SomeView(backGroundColor: "black")
} else {
SomeView(backGroundColor: "red")
}
to - be
SomeView(backgroundColor: keyword == "abc" ? "black" : "red")
- 아이덴티티를 유지하려고 하는것이 중요 (뷰의 수명과 상태를 보존하는데 도움)
AnyView
- 사람이 보기에 힘들다
- 컴파일러에서 정적 유형 정보를 숨겨서, 유용한 진단 오류 및 경고가 코드에 표시되지 않는다
- 필요하지 않을때 사용하면 성능이 저하된다.
- 일반적으로는 사용하지 말자
LifeTime
- SwiftUI가 시간이 지남에 따라 뷰와 데이터의 존재를 추적하는 방법
- SwiftUI는 비교를 수행하고 뷰가 변경되었는지 알기 위해 값의 복사본을 유지 후 지운다.

- View의 Value가 변경이 되어도 SwiftUI의 관점에선 동일한 View이다.
- id가 바뀌거나, viweDisappear가 되면 다른 View로 인식
- state,stateObject는 view의 lifeTime과 동일시 되어
- SwiftUI는 컬렉션 요소(ForEach)에서 생성된 모든 뷰에 ID를 할당을 해야하고, 이 속성은 HashAble 이여야 한다.

- 연결된 View의 수명 범위를 지정하기 위해 ID가 필요하다.
(결론)
- ID를 통해 LifeTime의 연속성을 컨트롤 한다.
- 뷰의 수명은 ID의 지속기간이므로 Identity의 안정성이 중요하다.
Dependencies
이를 통해 SwiftUI가 변경해야 할 사항,방법, 시기를 결정하여 화면에 표시되는 동적 사용사 인터페이스(Dynamic user InterFace)를 만드는 방법을 알려준다.
- SwiftUI가 인터페이스를 업데이트 해야 하는 시기와 이유를 이해하는 방법
- @Binding 값이나 ,var, @State, @ObservedObject 등 Dynamic Object들은 다 Depencies다

- Dependency Graph
- 이를 통해 body가 갱신되는데, 종속성에 연결된 View가 변경되기에, Tree 구조가 아닌 graph 구조로 효율적인 업데이트 진행
- 업데이트 된 View들은 없애고 새로 만듬
- Identity가 유니크 하고, 안정적이여야아 퍼포먼스 및 애니메이션이 향상된다.
Modifier 쓸떄 Branches를 쓰지 말아야 했다.
Strucural identity 때문에 2가지의 ID가 생겨난다.
'SwiftUI > 지식 창고' 카테고리의 다른 글
Explore UI animation hitches and the render loop (0) | 2024.11.09 |
---|---|
Image DownSampling (1) | 2024.11.08 |
Crash on startup(when iOS18 update) (0) | 2024.10.28 |
mitmproxy로 iOS 네트워크 감청해보기 (1) | 2024.09.05 |
긴급 심사 올리기 (0) | 2024.08.21 |