-
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 ๋ฅผ ์ค์ ํ๋ฉด ํ์ ๋ชจ๋ ๋ทฐ์๋ ์ ์ฉ์ด ๋์ด์ ์์ ์ฝ๋์ ๊ฐ์ ํํ๋ฅผ ๋ณผ ์ ์๋๋ฐ ์ฝ๋๋ ๋ ๊น๋ํด ์ง๋ค!


์ด์ ์ง์ง ์๋ณด์นด๋ ํ ์คํธ ์ฃผ๋ฌธ์ฑ์ ๋ง๋ค๋ฉด์ ์์ ๋ฅผ ๋ณด์.
์ฐ์ OrderHistory ๋ผ๋ ๊ตฌ์กฐ์ฒด๋ฅผ View ๋ฅผ ์ฑํํด์ ๋ง๋ค์๋ค.
previousOrders ๋ผ๋ ๋ฐฐ์ด๋ ๋ง๋ค์๋ค.
View ์๋ view ๋ฅผ ๋ฐํํ๋ body ๋ผ๋ ์ฐ์ฐ ํ๋กํผํฐ๊ฐ ์๋ค. body ๋ body ์์ ์ ์ธ๋ View ๋ค์ ํ๋์ View ๋ก ๋ฌถ์ด์ ๋ฐํํ๋ค. (์ง๊ธ ์ด OrderHistory ์์๋ previousOrders ๋ฅผ List ํํ๋ก ๋ง๋ค์ด์ ๋ฐํํ๊ณ ์๋ค.)
SwiftUI ๊ฐ ์ด๋ป๊ฒ Custom View ๋ฅผ ๋ง๋๋์ง ๋ถํฐ ๋ค์ ์ด์ผ๊ธฐ ํด๋ณด์. View ๊ตฌ์กฐ์ฒด๊ฐ View ํ๋กํ ์ฝ์ ์ฑํํ๋ค.
UIKit ์ด๋ AppKit ์ ์ป์๋ค๋ฉด,
View ๋ฅผ ํด๋์ค๋ก ๋ง๋ค๊ณ , Super Class ๋ฅผ ์์ํ๋ ๊ฑธ๋ก ๋ง๋๋ ๊ฒ์ ์ต์ํ ๊ฒ์ด๋ค.
UIView ๋ alpha ๊ฐ์ ๊ฐ์ง๊ณ ์๊ณ , backgroundColor ๋ ํ๋กํผํฐ๋ก ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋ผ SwiftUI ๋ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ?
์ด๋ฐ ๋ฐฉ์์ด๋ค.
๊ฐ๋ณ์ ์ธ ๋ทฐ์ ์์๋๋ ๋์
modifier ์์ ๊ฐ๊ฐ ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ์ ๊ฑธ์ณ ๋ถ์ฐ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๊ฐ๊ฐ์ ์์ ์๋ ๊ณ ์ ํ ๋ทฐ๋ฅผ ๋ง๋ ๋ค. ์ด๋ฅผ ํตํด ๋ทฐ์ ๋ฌด๊ฒ๋ฅผ ์ค์ด๊ณ , ๊ณ ์ ํ ๋ชฉ์ ์ ๋ง๊ฒ ์คํ ๋ฆฌ์ง๋ฅผ ์ต์ ํ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์์์ฒ๋ผ ๋ชจ๋ View ๊ฐ ๊ณต๋ ํฌํ๋ฆฟ์ ์ ๊ณตํ ํ์๊ฐ ์๊ณ , View ๋ผ๋ ํ๋กํ ์ฝ์ ์ฑํ ํ๊ธฐ๋ง ํ๋ฉด ๋๋ค๋ ๊ฒ์ด๋ค.
์ฑํํ๋ View ํ๋กํ ์ฝ์ ์ญํ ์ '๋๋ UI ์์๋ค' ๋ผ๊ณ ์ ์๋ฅผ ํ๋ ๊ฒ์ด๋ค.

View ํ๋กํ ์ฝ์ ๋ด๋ถ ๊ตฌํ์ ์ดํด ๋ณด์. ๊ทธ๋ฐ๋ฐ ๋ณด๋ค๋ณด๋ฉด View ํ๋กํ ์ฝ์ด View ๋ฅผ ๋ฆฌํดํ๊ณ ๊ทธ๋ฌ๋ ์ฌ๊ท๊ฐ ์๋๊ฐ? ํ๋ ์๊ฐ์ด ๋ ๋ค.
์ด๋ฐ ์์ผ๋ก ๊ณ์ ๋๋๋ฐ...
์ฌ๊ท๊ฐ ๊ณ์ ์ผ์ด๋์ง ์๋๋ก View ๋ฅผ ์ฑํํ๊ณ ์๋ ํ์
๋ค์ ๋ด๋ถ ๊ตฌํ์ด
extension Text : View {
public typealias Body = Never
}์ด๋ฐ ์์ผ๋ก Body ๋ฅผ Never ๋ก ์ฑํํ๊ณ ์์ด์, ๊ณ์์ ์ธ ์ฌ๊ท๊ฐ ์ผ์ด๋์ง ์๋๋ค.
์ด๋ฐ ๊ธฐ๋ณธ์ ์ธ ์์๋ค์ ๋ชจ๋ View ๋ฅผ ์ฑํํ ์๋ค.
์ด๊ฒ์ ๋ํด์ ์ข ๋ ์์ธํ ๋ด์ฉ์ ๋ณด๋ ค๋ฉด Building swiftUI Custom View WWDC ๋ฅผ ์์ฒญํ๋ผ๊ณ ํ๋ค.
View ๋ ๋ชจ๋ธ์ ๋ณํ๊ฐ ์์ ๋ ๋ง๋ค ์ ๋ฐ์ดํธ ๋๋๋ก ๋์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ทฐ๊ฐ ๋ฐ๋ ๋ ๋ง๋ค ์ ์ ํ ๊ธฐ๋ณธ ์ ๋๋ฉ์ด์ ์ ๋ฃ์ด์ฃผ๊ธฐ ๊น์ง ํ๋ค.

์๊ธ๊ณผ ํ์ถ๋ฅผ ์ถ๊ฐํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์. ๋จผ์ ์๊ธ๋ถํฐ!
if ๋ฌธ ๊ณผ ๊ฐ์ ์ ์ด ํ๋ฆ์ ์ฌ์ฉํ๋ฉด ๋ทฐ๊ฐ ์คํ์ ํฌํจ๋์ด์ผ ํ๋ ์๊ธฐ์ ์ ์ ์๋ค.
์ ์ธ์ ์ธ ์ฝ๋์์ if ๋ฌธ์ ์ฌ์ฉํ๋๊ฑด ๋๋ฌด ๋๋ฌด ์์ฐ์ค๋ฝ๋ค.
์์๋ฅผ ํ๋ ๋ณด์.
flipped ๋ผ๋ ์์ฑ์ ๊ฐ์ง ๋ทฐ๊ฐ ์๊ณ
๊ทธ ์์ฑ์ ๋ฐ๋ผ ์ฑ ์์์ฝ์ด ์ด๋ป๊ฒ ๋ ์ง ๋ฃ์ด ์ฃผ์๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ฐ ๋ฐฉ์์ ์ข์ง ์๋ค.
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๋์๊ฐ๋ ์ ๋๋ฉ์ด์ ์ด ์๋๋ผ, ์ด์ํ cross fade ์ ๋๋ฉ์ด์ ์ด ๋ํ๋๋ค. ๋ค๋ฅธ ๋ ์ข ๋ฅ์ ๋ทฐ๋ฅผ ์ ํ์ํจ๋ค๊ณ ์ธ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ์ฐ๋๊ฒ ์ ์ ํ๋ค.
ํ๊ฐ์ ๋ทฐ์์ modifier ๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ํํ๋ก ๋ง์ด๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํ๋์ ๋ทฐ์์ modifer ๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ผ๋ก ์ธ์ํด์ ์๋์ผ๋ก ํ์ ํ๋ ์์ฃผ ์์ฐ์ค๋ฌ์ด ์ ๋๋ฉ์ด์ ์ด ๋ค์๊ฐ๊ฒ ๋๋ค.
๋ค์ ๋ง๋ค๋ ์๋ณด์นด๋ ์ฑ์ผ๋ก ๋์๊ฐ ๋ณด์.
์ด์ ์ฝ๋๊ฐ ์กฐ๊ธ ๊ธธ์ด์ง๊ณ ์๋ค.
๋ถ๋ฆฌ๋ฅผ ํด๋ณด์.
OrderCell ์ ๋ง๋ค๊ณ
์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด ์ฝ๋๊ฐ ์กด์ฌํ๋ ๊ทธ๋ฅ ์ฝ๋๋ฅผ OrderCell ๋ก ์ฎ๊ธฐ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
๋ถ๋ฆฌ๋ฅผ ํ๊ณ order ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ค.
์ ํ์ ์ด์ ๊ตฌ์ฑํ๋ ๊ฒ๊ณผ ์ฑ๋ฅ ์ต์ ํ ์ฌ์ด์์ ๊ณ ๋ฏผํ ํ์๊ฐ ์๋ค๊ณ ํ๋ค.
์ด์ ๊ณ ์ถ ํ ํ์ ์ถ๊ฐํด ๋ณด์.
์ฐ์ ์ ์ด๋ ๊ฒ ํ ๊ฒ์ ์๊ฐํ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ...
์์ ๊ฐ์ ๋ฐฉ๋ฒ์ด ๋ ์ข๋ค.
List ์ ๋ง์ฐฌ๊ฐ์ง๋ก ForEach ๋ ViewBuilider ๋ฅผ ์ฌ์ฉํ๋ค.
๋์ด ๋ค๋ฅธ์ ์ด๋ผ๊ณ ํ๋ค๋ฉด List ๋ ์์ฒด์ ์ธ ์๊ฐ ํจ๊ณผ๋ฅผ ์ถ๊ฐํ๋ค๋ ๊ฒ์ด๋ค. (Divider ๋ฅผ ์ฌ์ด์ ์ถ๊ฐํ๋ค๊ฑฐ๋ ํ๋ ๊ฒ ๊ฐ์ด!)
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ๋ฐ๊พธ๋ฉด ๋ญ๊ฐ ์ข๋? ๋ง์ฝ์ ์๋ก์ด ํ ํ์ ์ถ๊ฐํ๊ฒ ๋๋ค๊ณ ํ๋๋ผ๋, ๋ ์ถ๊ฐํ ์ฝ๋๊ฐ ์๋ค.

์ด๋ ๊ฒ ๊ณ๋์ ์ธ๋ฒ์งธ ์์ด์ฝ์ผ๋ก ์ถ๊ฐ ํ๋๋ฐ... ์ด๋ ํ ์ฝ๋๋ ๋ ์์ฑํ์ง ์์๋ ๋๋ค
์ผ์ชฝ์ ๋ทฐ๋ฅผ ๋ณด๋ฉด ๋์์ง๋ ์์๋ฐ ๋ญ๊ฐ ์ด์ํ๋ค.
์ค๋ฅธ์ชฝ ๋ทฐ๊ฐ ์ฌํ๊ป ๋ด์๋ ์คํ์ผ์ด๋ค.
SiwftUI ์์๋ ์ค๋ฅธ์ชฝ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ Form ์ผ๋ก ๋ง๋ค ์ ์๋ค.
ํ์ค์ ์ธ ์์์ ์ ๊ณตํ๋ ์
์ด๋ค.
์ค๋ฅธ์ชฝ์ ์ฝ๋๋ฅผ ์ผ์ชฝ์ ์ฒ๋ผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ ํด์ผ ํ ๊ฒ์

๊ทธ์ VStack ์ Form ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ ๋ฟ!
easy!!
๋ฒํผ ๋ถ๋ถ์ ์กฐ๊ธ ์์ธํ ๋ณด์.
๋ฒํผ์๋ label ์ ๋ฃ์ ์ ์๋๋ฐ, label ์ View ๋ฅผ ๋ฐํํ๋ ํํ๋ก ๋์ด ์๋ค.
๊ทธ๋ฌ๋ View ๋ฅผ ๋ฐํํ๋ ๊ทธ ์ด๋ค ๊ฒ๋ ์ฌ ์ ์๋ค!
Text ๋
Image ๋
VStack ์ด๋ ๋ชจ๋ ๋ฃ์ ์ ์๋ค.

์ด๋ ๊ฒ ์์ฒญ ๋ค์ํ ์ข
๋ฅ์ ๋ฒํผ์ ๋ชจ๋ Button ์ ์ฌ์ฉํด์ ๋ง๋ค ์ ์๋ค.
๋ฌผ๋ก ๋ฒํผ์๋ modifier ๋ฅผ ์ถ๊ฐํด์ ๋ ๋ค์ํ ์์ ๋ ๊ฐ๋ฅํ๋ค.

์ ์ ์ ์ด
- ๋น์ฃผ์ผ์ด ์๋ ๋ชฉ์ ์ ์ ์ธ
- ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ๋ณด๋ค ๋๋ํ๋ค
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅ์ฑ์ด ๋๋ค
- ๊ฐ๋ ฌํ ์ปค์คํฐ ๋ง์ด์ฆ ๊ธฐ๋ฅ
์ฐ๋ฆฌ๊ฐ ์์น์๋ ์ด์ง ๊ตฌํ์ ํด๋ณด์.
Toggle ์ ํ๋ ํผ์ ๊ด๊ณ์์ด ์๋ํ๋ค.
๋ฒํผ๊ณผ ๋ค๋ฅธ ์ ์ Bool ๊ฐ์ ๋ฐ์ธ๋ฉ ํ๋ค๋ ๊ฒ์ด๋ค. (๋๋ถ๋ถ์ primitive ํ์ ์ด ์ง์ํ๊ณ ์๋ค.)
Toggle์ VoiceOver ๊ธฐ๋ฅ๋ ์๋ฒฝํ๊ฒ ์ง์ํ๊ณ ์๋ค.
์ ๋ฐ ์์ผ๋ก ์ฝ์ด์ค๋ค.
๋ฌผ๋ก ์ฐ๋ฆฌ๊ฐ Text ๊ฐ ์๋๋ผ ์ด๋ฏธ์ง๋ฅผ ๋ฃ๊ฑฐ๋ ๊ทธ๋ฌ์ ๋๋ accessibility๋ฅผ ์ง์ ํด ์ค ์ ๋ ์๋ค.
๋ ์์ธํ ๋ด์ฉ์ Accessibility in SwiftUI WWDC ๋ฅผ ๋ณด๋ฉด ๋๋ค๊ณ ํ๋ค. ์ด๋ฒ์ macOS ์ Toggle ์ ์ ์ฉํด ๋ณด์.
Toggle ์ด ์๋๋ผ macOS ์ ๋ง๊ฒ picker ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.

Picker ๋ List ์ฒ๋ผ ๋ฐ์ธ๋ฉ ํ ๊ฐ์ ๋ฐ์ ์ ์๊ณ , ๊ทธ๊ฒ์ ๋ํ tag๋ฅผ ์ค์ ํ ์ ์๋ค.
๋ค์ํ picker ์คํ์ผ์ด ์๋๋ฐ, ์ฌ๊ธฐ์๋ radio Group ์ ์ ํํ๋ค.

์ด๋ฐ์์ผ๋ก ๋ง์ด ๋ง๋๋ ๊ฒ๋ ๊ฐ๋ฅ์ ํ๋ค. ํ์ง๋ง
ForEach ๋ฅผ ํ์ฉํ๋ฉด ์ด๋ ๊ฒ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์๋ค.
SwiftUI ๋ค์ํ ํ๋ ํผ์์ ์ง์๋๋ frame work๋ค!
mac ์์ ์ฐํด๋ฆญํ๋ฉด ๋์ค๋ contextMenu ๋ถ๋ถ์ ๋ณด์.
์๋ณด๋ Toggle ๊ฐ๊ธฐ๋ ํ๊ณ Button ๊ฐ๊ธฐ๋ ํ๊ฒ ์ต์ํ๋ค.
๊ทธ๋์ ์ค์ ๋ก๋ Toggle ๊ณผ Button ์ ์ฌ์ฉํด์ ๊ตฌํํ ์ ์๋ค.
Form ์ ๋ค์ํ๋ฒ ๋ณด์.
์ ์ฒด์ ์ผ๋ก ์ด๋ ๊ฒ ์๊น์ ์ง์ ํ ์๋ ์๋ค.
ํน์ ์กฐ๊ฑด์์ ๋ฒํผ์ ์๋์ ๋ง์ ์๋ ์๊ณ
๋คํธ์ํฌ์ ์ฐ๊ฒฐ์ด ์๋์ด ์์ผ๋ฉด ์ด ๋ชจ๋ ๊ฒ์ ๋ชปํ๊ฒ ํ ์๋ ์๋ค.
๋ฌผ๋ก ์ด๋ ๊ฒ ๋ ๊น๋ํ๊ฒ ์ง๋ ๊ฒ์ ๋ ์ ํธํ๋ค.

Environment ์๋ ๋ง์ ์ฌํญ์ด ํฌํจ๋์ด ์๋ค.
๋ชจ๋ ๋ทฐ๋ ์์ ๋ทฐ๋ก ๋ถํฐ enviornment๋ฅผ ๋ฐ๋๋ค.
์ฌ๊ธฐ ๋ ์ด์์ ๋๋ ์
์ ์์ ๋ทฐ๋ก๋ถํฐ ๋ฐ๋ ๊ฒ์ด environment๋ฅผ ๋ฐ๊ณ ์๋ค๊ณ ํํํ ์ ์๋ค.
environment๋ ์ฐ๋ฆฌ๊ฐ ๋ค์ํ ํ๊ฒฝ์ ๋ง๋๋ ๊ฒ์ ์์ฃผ ์ ๋์์ค๋ค.
์ผ๋จ ์ฐ๋ฆฌ ์ฑ์ ์ผ๋ก ์๋ณด์นด๋ ํ ์คํธ์ ์ ํํ ๊ณ๋์ ์์น๋ฅผ ์ ํ๋ ๋ทฐ๋ฅผ ๋ง๋ค์ด ๋ณด์.
์ผ๋จ Egg ์ด๋ฏธ์ง๋ฅผ ๋๋ ๊ทธ ํ ์ ์๊ฒ gestureํ ํฌ์์
์ ๋ง๋ค์๋ค.
๊ทผ๋ฐ ์ฃผ๋ฌธ์ ๋ฐ๋ค๋ณด๋ฉด egg ๊ฐ ๋ถ์กฑํ๊ฑฐ๋ ๊ทธ๋ฐ ์ด์ ๋๋ฌธ์ disable ํด์ผ ํ ๋๊ฐ ์๋ค.
์ฐ๋ฆฌ๊ฐ gesture ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฑด ์ ์ญ์ ์ผ๋ก ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ณ๋์ด ๋จ์ด์ก๋ค๋ ๊ฒ์ด ์ ์ญ์ ์ผ๋ก ์๋ ค์ผ ํ๋ ์ ๋ณด๋ผ๋ฉด environment ์์ ๊ด๋ฆฌ ํ ์ ๋ ์๋ค.
disable ๋์ ๋๋ ์ด๋ฏธ์ง์ ์ฑ๋ ์์ฒด๋ฅผ ์ค์ฌ ์ฃผ์ด์ ์ง๊ธ ๋์ค์์ด๋ธ ์ํ๋ผ๋ ๊ฒ์ ์๊ฒ ํ๊ธฐ ๊น์ง ํ๋ ๋ค์ด๋ค.
๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋ฉด ๋ทฐ๊ฐ ๋ค์ ๊ทธ๋ ค์ง๊ธฐ ๋๋ฌธ์, ์ ๋ฐ์ดํธ์ ๋ฌธ์ ๋ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค.
์ด ์ฑ์ ์ ๋ง๋ค์๋๋ฐ ์ผ๋ฐ์ ์ธ Navigation style ์ด ์๋๋ผ๋ ๋ฌธ์ ๊ฐ ์๋ค.
ํ๋ฉด์ด๋์ ํด๋ณด์.
์ผ๋จ NavigationView ๋ก OrderForm ์ ๊ฐ์ ์ ์๋ค.
.navigationBarTitle ์ ์ฌ์ฉํด์ title ์ ๊พธ๋ฐ ์๋ ์๋ค.
EggLocationPicker ๋ผ๋ ํญ๋ชฉ์ ํญํ๋ฉด ํ๋ฉด์ด ๊ณ๋ ์์น ์ ํํ๋ ๋ทฐ๋ก ์ด๋ํ๋ ๊ฒ์ ๊ตฌํ ํด๋ณด์.
NavigationButton ์ ์ ๋ ๊ฒ ์ถ๊ฐํ๋ฉด ๋๋ค.
์ด๋๋ ๋ทฐ์์๋ ์๋์ผ๋ก backButton ์ด ์๊ธฐ๊ณ
Baritem ์ ์ถ๊ฐํ๋ฉด reset์ ๋ง๋ค ์๋ ์๋ค.
Order List ๋ ์์ ํ ๋ค๋ฅธ ๊ฐ๋
์ด๋
TapView ๋ก ํํํ์.
์ด๋ ๊ฒ ๋ฃ๊ณ ๊ฐ ๋ทฐ์ ๋ฐ๋ผ tabItemLabel ์ ์ค์ ํด ์ค ์ ์๋ค.
์ด๊ฑฐ ์์ดํฐ์์๋ ์ด๋ฐ ํํ๊ฐ ์ข์๋ฐ
์์ดํจ๋๋ ๋งฅ๋ถ์์๋ ํ๋ฉด์ด ํฌ๋ ์คํ๋ฆฟ๋ทฐ๋ก ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
๋ฌผ๋ก ์ธ๋ถ ์ ๋ณด๋ ์กฐ๊ธ ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
์ค์ํ ํฌ์ธํธ๋ ๋ชจ๋ ๊ฐ์ Navigation ์ด๋ผ๋ ๊ฒ์ ๊ณต์ ํ๊ณ ์๋ค๋ ๊ฒ์ด๋ค.
d