-
Notifications
You must be signed in to change notification settings - Fork 0
[WWDC19] SwiftUI Essentials
μ΄κΈμ WWDC19 SwiftUI Essentials μ λ³΄κ³ μ 리 ν κΈ μ λλ€.

SwiftUI λ λ°ν΄λ₯Ό μ¬λ°λͺ νλ €κ³ νμ§ μλλ€. μ°λ¦¬κ° μ μ UIKit μμ μ¬μ©νλ λ€μν μ»΄ν¬λνΈλ€ κ·Έλ¦¬κ³ λ€μν κΈ°λ₯λ€μ΄ μ΄λ―Έ λͺ¨λ λ€μ΄κ° μλ€. κ·Έμ λ°©λ²μ λ°κΏ¨μ λΏμ΄λ€.
κΈ°λ³Έμ μΈ κ²μ μ½κ² ꡬνν μ μκ² λμμ£Όκ³
μμ λ‘κ² μ»€μ€ν
ν μ μλλ‘ λ§λ€μλ€κ³ νλ€.
μ보카λ ν μ€νΈ μ£Όλ¬Έ μ±μ λ§λ€λ©΄μ SwiftUIμ μΉν΄μ Έ 보μ.

μ΄ νλ©΄μμ 보μ΄λ λͺ¨λ κ²μ View λ‘ κ΅¬μ±λμ΄ μλ€.
μ΄ λ§μ μ΄ν΄νκΈ° μν΄μ μ΄μΌκΈ°λ₯Ό λ λ€μ΄λ³΄μ.

μΌλ¨ UIKit μλ UIView κ° μκ³ AppKit μλ NSView κ° μλ€. SwiftUI μλ View κ° μλ€!


SwiftUI μμ μ΄λ° μμΌλ‘ κ³μΈ΅κ΅¬μ‘°μ μ½λκ° μμ±λλ€.
μμ§ SwiftUI λ₯Ό μ λͺ¨λ₯Έλ€κ³ ν΄λ UIKit μ μλ€λ©΄ μ¬κΈ°μ μ΄μν μ μ λ°κ²¬ν μ μλ€.
addSubView κ°μ ν¨μκ° μλ€λ κ²μ΄λ€.
κ³μΈ΅ ꡬ쑰λ₯Ό μν΄μ κ·Έ ν¨μκ° νμνλ° λ§μ΄λ€.
μλνλ©΄ SwiftUIλ View κ³μΈ΅ ꡬ쑰λ₯Ό νλμ© κ΅¬μΆνλ κ²μ΄ μλλΌ, μμ±λ ꡬ쑰체λ₯Ό λ§λ€κ³ κ·Έκ²μ μ΄κΈ°ν νκΈ° λλ¬Έμ΄λ€.
μ΄ λ§μ μ¦
그건 UIKit μ imperatively(λͺ μμ μΌλ‘) νκ² μλνκ³ SwiftUI λ declaratively(μ μΈμ μΌλ‘) νκ² μλνκΈ° λλ¬Έμ΄λ€.
(νλλ μ΄ν΄ μλλκ²μ΄ μ μ κ³μ μ½μ΄λ³΄μ...)
그건 UIKit μ imperatively(λͺ μμ μΌλ‘) νκ² μλνκ³ SwiftUI λ declaratively(μ μΈμ μΌλ‘) νκ² μλνκΈ° λλ¬Έμ΄λ€.
λͺ μμ μ΄κ³ μ μΈμ μΈκ² 무μμΈμ§ μκΈ° μν μμλ₯Ό 보μ. λͺ μμ μΌλ‘ μ보카λ ν μ€νΈλ₯Ό λ§λ€μ΄ 보μ.


λͺ μμ μΌλ‘ μ보카λ ν μ€νΈλ₯Ό λ§λ λ€λ κ²μ μΉκ΅¬νν μ νλ‘ μ΄λ»κ² μ보카λ ν μ€νΈλ₯Ό λ§λλμ§ μ€λͺ νλ κ²κ³Ό κ°λ€.
κ·ΈλΌ μ μΈμ μΌλ‘ μ보카λ ν μ€νΈλ₯Ό λ§λλ κ²μ 보μ.
μ μΈμ μΌλ‘ μ보카λ ν μ€νΈλ₯Ό λ§λλ κ²μ μ보카λ μ₯μΈμκ² μ보카λ ν μ€νΈλ₯Ό μ£Όλ¬Ένλ κ²μ΄λ€.

μ΄μ λ€μ μ½λλ₯Ό νλν λ―μ΄λ³΄μ. SwiftUI κ° κ·Έ μ보카λ μ₯μΈ μν μ΄λ€! μμμ ν΄μ€ κ²μ΄λ€.

Contianer μ closure λ ViewBuilder λΌλ μμ£Ό νΉμν λ μμΌλ‘ λμ΄ μλ€. μΌλ¨μ κ·Έ ν΄λ‘μ μμ μ μΈμ νκΈ°λ§ νλ©΄ View μμ λ³Ό μ μλ€λ κ²μ μμ λλ©΄ λλ€.

Container μ λνμ μΈ μλ₯Ό VStack μ 보μ. μμ λ€λ₯Έ View λ€μ΄ λ€μ΄κ° μλ€. (SwiftUI μμλ Image λ Text λ View μ΄λ€.)

μ’ λ κΉμ μ΄ν΄λ₯Ό μν΄ μ VStack μ λ΄λΆκ΅¬νμ μ΄ν΄λ³΄μ.
content λΌλ νλΌλ―Έν°κ° μκ³ , ν΄λ‘μ νμ μ λ°κ³ μμ§λ§, @ViewBuilder κ° λΆμ΄ μλ€.
Swift μ»΄νμΌλ¬κ° μ΄ ν΄λ‘μ μμ μλ λͺ¨λ λ·°μ κ°μ λͺ¨μμ νλμ VStack μΌλ‘ λ€μ 리ν΄νλ λ²μ μκ³ μλ€.

μ°λ¦¬λ μ΄ ν΄λ‘μ μμ Text Toggle Stepper λ± μ΄λ€ μ’ λ₯μ View λ λ£μ μ μλ€.

μ΅μνμ§ μμ λ¬Έλ²μΈ $ (λ¬λ¬μΈμΈ) μ΄ μλ€. λ¬λ¬μΈμΈμ μΌλ°μ μΈ κ° λμ λ°μΈλ© κ°μ μ λ¬νκ³ μλ€λ κ²μ μλ―Ένλ€.

@Stateλ₯Ό μ¬μ©ν proertyλ₯Ό SwiftUIκ° λ³΄λ©΄, μλμΌλ‘ Scene λ€μμ μ§μ μνλ₯Ό μμ± λ° κ΄λ¦¬ν λ€μμ μ΄ μμ±μ ν΅ν΄ ν΄λΉ μνκ°μ λ ΈμΆνλ€.
μ€ν νΌλ₯Ό λλ₯Ό λ κ°μ μμ ν μλ μμ΄μΌ νκΈ° λλ¬Έμ, λ°μΈλ©ν κ°μ λ°λλ€.
λ°μΈλ©μ λν΄μ μμΈν κ²μ μκ³ μΆμΌλ©΄ SwiftUI Data Flow WWDC λ₯Ό μμ²νλΌκ³ νλ€.
SwiftUIλ View κ³μΈ΅ ꡬ쑰λ₯Ό νλμ© κ΅¬μΆνλ κ²μ΄ μλλΌ, μμ±λ ꡬ쑰체λ₯Ό λ§λ€κ³ κ·Έκ²μ μ΄κΈ°ν νλ€.
λΌλ λ§μ μ΄ν΄νλ €λ©΄ modifier μ λν΄μ μμμΌ νλ€.
SwiftUI μμ modifier μ μ΄μ©ν΄ μλ‘μ΄ λ·°λ₯Ό λ§λ λ€.

μμλ₯Ό 보μ. .modifer λ₯Ό μ¬μ©ν΄μ μλ‘μ΄ κ°λ μ κ³μν΄μ μΆκ°ν μ μλ€. chainingλ ν μ μλ€!
UIKitμ κ³μ μ»λ€λ©΄ μ΄μνλ€κ³ μκ° ν μ μλ€. μλνλ©΄ μ¬νκ» κ³μΈ΅κ΅¬μ‘°λ₯Ό κ°λ³κ² μ μ§νλλ‘ νμΌλκΉ.
κ·Έλ¬λ μ°λ¦¬λ μ μΈμ μ½λλ₯Ό μμ±νκ³ μλ€. μ μΈμ μ½λλ λ€λ₯΄κ² μλνλ€. λ§μΉ κ³ μ°¨ν¨μμ return κ° μ¬λ¬κ°λ₯Ό 체μ΄λ νλ―μ΄ λͺ¨λ modifier λ View λ₯Ό λ°μμ View λ₯Ό 리ν΄νλ€.
κ·Έλμ κ³μΈ΅ ꡬ쑰λ₯Ό νλμ© κ΅¬μΆνλ κ²μ΄ μλλΌ, μμ±λ ꡬ쑰체λ₯Ό λ§λ€κ³ κ·Έκ²μ μ΄κΈ°ν νλ€. λΌλ λ§μ΄ λμ€λ κ²μ΄λ€. addSubView κ° νμ μλ μ΄μ λ μ΄λ―Έ λͺ¨λ SubView λ€μ κ°μ§ μνμμ μ΄κΈ°νκ° μΌμ΄λκΈ° λλ¬Έμ΄λ€.
SwiftUI λ₯Ό λ§λ€λ©΄μ λ§μ κ³ λ―Όμ νκ³ Scene μμ rendering μμ€ν μμ μ΅μ νλ₯Ό ν΄μ£ΌκΈ° λλ¬Έμ, μ±λ₯μ λν λ¬Έμ λ κ±±μ ν νμκ° μλ€κ³ νλ€.
- μμλ₯Ό λͺ μμ μΌλ‘ μ μ μλ€.
- View κ°μ 곡μ κ° κ°λ₯νλ€.
μμλ₯Ό λͺ μμ μΌλ‘ μ μ μλ€. μ°λ¦¬λ λ€μν feature λ€μ΄ μ μ©λλ μμλ₯Ό μ ν΄μ€ μ μλ€.
μμ μ΄λ―Έμ§λ λ°±κ·ΈλΌμ΄λλ₯Ό λ¨Όμ μ£Όκ³ ν¨λ©μ μ€κ² μ΄κ³
μμ μ΄λ―Έμ§λ ν¨ν
μ λ¨Όμ μ£Όκ³ λ°±κ·ΈλΌμ΄λλ₯Ό μ€ κ² μ΄λ€.
λκ°μ κ²°κ³Όκ° λ€λ₯Έκ²μ modifierκ° μμλλ‘ μλνκΈ° λλ¬Έμ΄λ€.
μ΄κ² λ§μ½μ modifier κ° μλ, ν μ€νΈμ μμ±μ΄λΌκ³ νλ€λ©΄ λ¬Έμλ₯Ό μ½κ±°λ μ€νμ ν΄λ³΄μ§ μκ³ λ μ΄λ€ μμ±μ΄ λ¨Όμ μ μ©λλμ§ μ μ κ° μλ€.
modifier λ₯Ό μμλλ‘ μ°κ²°ν΄μ λͺ μμ μΌλ‘ μμλ₯Ό μλ €μ£Όκ³ μλ κ²μ΄λ€.
View κ°μ 곡μ κ° κ°λ₯νλ€.
κ°κ°μ View μ opacity modifier λ₯Ό μ€μ ν΄ μ€ μ μλ€.
κ°μ κ²μ λ°λ³΅ν΄μ λ€λ μ½λκ° μ§μ λΆνλ€.
μμ κ°μ΄ VStack μ opacity modifier λ₯Ό μ€μ νλ©΄ νμ λͺ¨λ λ·°μλ μ μ©μ΄ λμ΄μ μμ μ½λμ κ°μ ννλ₯Ό λ³Ό μ μλλ° μ½λλ λ κΉλν΄ μ§λ€!


d