TAGS

주제로 글을 찾습니다

Tech, Domain, Journal 글에 붙은 공통 태그를 모았습니다.

애플 플랫폼 백과사전WWDC21 10022

Demystify SwiftUI (WWDC21 10022)

Domain

Matt Ricketson·Luca Bernardi·Raj Ramamurthy의 대표 세션. identity·lifetime·dependencies 세 축으로 SwiftUI의 업데이트 규범을 체계화한다. dependency graph가 곧 SwiftUI의 render tree라는 것까지.

  • iOS
  • SwiftUI
  • Identity
  • Lifetime
  • Dependencies
애플 플랫폼 백과사전SwiftUI의 Identity · Lifetime · Dependencies

SwiftUI의 Identity · Lifetime · Dependencies

Domain

Omar Radwan의 SwiftUI Under the Hood 번역. Demystify SwiftUI 세션(WWDC21 #10022 · WWDC23 #10160)의 세 기둥인 identity·lifetime·dependencies를 코드 예제와 함께 정리한다.

  • iOS
  • SwiftUI
  • Identity
  • Lifetime
  • Dependencies
애플 플랫폼 백과사전Variadic Views in SwiftUI

Variadic Views in SwiftUI

Domain

VStack 안에 여러 뷰를 넣으면 SwiftUI는 그걸 어떻게 들고 있을까. TupleView·_VariadicView.Tree·UnaryViewRoot/MultiViewRoot의 구분, 그리고 List가 행 사이에 Divider를 끼워 넣을 수 있는 이유까지.

  • iOS
  • SwiftUI
  • VariadicView
  • TupleView
  • ViewBuilder
SwiftUI 기본실전 구성 팁

실전 구성 팁

Domain

기본기를 익히고 실제 화면을 만들기 시작하면 곧 다른 종류의 어려움을 만난다. 문법이 아니라 구조의 문제다. body 안에 뷰가 쌓이면서 수십, 수백 줄이 되고, 어디를 고쳐야 할지 눈에 안 들어온다. 조건 분기와 스택이 겹치면 들여쓰기만 깊어진다.

  • iOS
  • SwiftUI
  • ViewBuilder
  • renderingMode
  • LazyVStack
애플 플랫폼 백과사전SwiftUI 의 diffing algorithm

SwiftUI 의 diffing algorithm

Domain

SwiftUI 가 React 처럼 identifier 나 shortest-edit-script 없이도 대부분의 경우 view 변화를 모호함 없이 판별하는 이유. 비결은 정적 타입. TupleView<(Text, _ConditionalView<A, B>)> 자체가 구조를 드러내므로 같은 타입끼리만 비교하면 된다. Swift 코드로 직접 재구성해 본다.

  • iOS
  • SwiftUI
  • SwiftUI Internals
  • Diffing
  • ViewBuilder
SwiftUI 기본상태로 화면을 제어한다

상태로 화면을 제어한다

Domain

UIKit에서 얼럿을 띄우려면 present(alert, animated: true)를 호출했다. 화면 전환도, 액션 시트도 전부 "지금 띄워라"라고 명령하는 함수 호출이었다. SwiftUI로 넘어와 처음 얼럿을 띄우려 할 때 이 함수를 찾다가 막힌다. 그런 함수가 없기 때문이다.

  • iOS
  • SwiftUI
  • State
  • Alert
  • Sheet
애플 플랫폼 백과사전SwiftUI 에서 escaping closure 를 쓰지 말아야 하는 이유

SwiftUI 에서 escaping closure 를 쓰지 말아야 하는 이유

Domain

커스텀 container view 를 만들 때 content 를 @escaping closure 로 받을지, 초기화 때 바로 평가해서 view 로 저장할지. 겉보기엔 closure 쪽이 더 효율적이지만 실제로는 @State 최적화와 memoization 이 동시에 깨진다. Rens Breur 가 왜 view 는 이미 함수인지부터 짚고 시작한다.

  • iOS
  • SwiftUI
  • SwiftUI Internals
  • ViewBuilder
  • Memoization