๐ ์ด ๊ธ์ Apple Developer Documentation - SwiftUI App Dev Tutorials๋ฅผ ChatGPT๋ฅผ ํตํด ๋ฒ์ญํ์ฌ ์์ฑ๋์์์ ์๋ ค๋๋ฆฝ๋๋ค.
SwiftUI ๋ทฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ง๋ง, ๋ทฐ ๊ฐ์ ํ์ ๋ฐฉ๋ฒ๋ ์์์ผ ํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋ ๋ค๋น๊ฒ์ด์ ๊ณ์ธต์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ๊ฒ์ ๋๋ค.
๋ฆฌ์คํธ ํ๋ฉด์์ ์์ํ์ฌ ์์ธ ๋ทฐ๋ฅผ ํ์ํ ๋ค์, ํ์ด๋จธ ๋ทฐ๋ฅผ ๋ค๋น๊ฒ์ด์ ์คํ์ ๋งจ ์๋ก ํธ์ํฉ๋๋ค.
NavigationStack
์ปจํ ์ด๋ ๋ทฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ทฐ ์คํ์ ํ์ํ ์ ์์ต๋๋ค. ScrumsView.swift ํ์ผ์์ ๋ฆฌ์คํธ๋ฅผ ๋ํํ์ฌ ๋ค๋น๊ฒ์ด์ ์ ์ค์ ํ ๊ฒ์ ๋๋ค.
์คํฌ๋ผ ๋ฆฌ์คํธ๋ ๋ฃจํธ ๋ทฐ๋ก ์๋ํ๋ฉฐ ํญ์ ์กด์ฌํฉ๋๋ค. ๋ฆฌ์คํธ์์ ๋ค๋น๊ฒ์ด์ ๋งํฌ๋ฅผ ์ ํํ๋ฉด ์คํ์ ์คํฌ๋ผ ์์ธ ๋ทฐ๊ฐ ์ถ๊ฐ๋์ด ๋ฆฌ์คํธ๋ฅผ ๋ฎ์ต๋๋ค. ๋ค๋ก ํ์ํ๋ฉด ์์ธ ๋ทฐ๊ฐ ์ ๊ฑฐ๋๊ณ ๋ฆฌ์คํธ๊ฐ ๋ค์ ๋ํ๋ฉ๋๋ค. ์คํฌ๋ผ ๋ฆฌ์คํธ๊ฐ ์คํ์ ์๋ ์ ์ผํ ๋ทฐ์ผ ๋๋ ์์คํ ์ด ๋ค๋ก ํ์ํ๋ ์ ์ด๋ฅผ ๋นํ์ฑํํฉ๋๋ค.
ScrumsView.swift
์์ List
๋ฅผ NavigationStack
์ผ๋ก ๊ฐ์ธ์ธ์.
NavigationLink
๋ฅผ ์ถ๊ฐํ๊ณ , ์ด๊ธฐํ์์ Text(scrum.title)
์ ๋์์ผ๋ก ์ ๋ฌํ์ธ์.
๋์์ ์ฌ์ฉ์๊ฐ ์์์ ์ํธ์์ฉํ ๋ ๋ค๋น๊ฒ์ด์
๊ณ์ธต์์ ๋จ์ผ ๋ทฐ๋ฅผ ํ์ํฉ๋๋ค. ๊ฐ ํ์ ๊ฐ๋ณ ๋์์ผ๋ก ํธ์๋ฉ๋๋ค. Text
๋ทฐ๋ ๋ค์ ์น์
์์ ์์ธ ํ๋ฉด์ ๋ง๋ค ๋๊น์ง ํ๋ ์ด์คํ๋๋ก ์๋ํฉ๋๋ค.
์ฐธ๊ณ : SwiftUI๋ ํ์ ์๋์ผ๋ก ๋์คํด๋ก์ ์ธ๋์ผ์ดํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
.listRowBackground
์์ ์๋ฅผ NavigationLink
๋ก ์ด๋ํ์ธ์.
์ด ์น์ ์ ๋๋จธ์ง ๋ถ๋ถ์์๋ ์ ๋ชฉ๊ณผ ํด๋ฐ ํญ๋ชฉ์ ์ฌ์ฉ์ ์ ์ํ ๊ฒ์ ๋๋ค.
navigationTitle
์ "Daily Scrums"์ผ๋ก ์ถ๊ฐํ์ธ์.
.navigationTitle
์์ ์๋ฅผ List
์ ์ถ๊ฐํฉ๋๋ค. ์์ ๋ทฐ๋ ์์ ์๋ฅผ ์ฌ์ฉํ์ฌ NavigationStack
์ ์ธ๊ด์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
ํด๋ฐ๋ฅผ ์ถ๊ฐํ๊ณ , ๋ํ๊ธฐ ์์ด์ฝ์ ํ์ํ๋ Button
ํด๋ฐ ํญ๋ชฉ์ ์ถ๊ฐํ์ธ์. ํ์ฌ๋ ๋ฒํผ์ ๋น ์ก์
์ ์ ๋ฌํ์ธ์.
์ด ๋ทฐ๋ ๋์ค์ ์๋ก์ด ์คํฌ๋ผ์ ์ถ๊ฐํ๋ ํ๋ฉด์ ๋ง๋ค ๋ ๋ค์ ๋ฐฉ๋ฌธํ ๊ฒ์
๋๋ค.
๋ํ๊ธฐ ๋ฒํผ์ ๋ชฉ์ ์ ์ค๋ช
ํ๋ accessibilityLabel
์ ์ถ๊ฐํ์ธ์.
์ฑ์ ์๋ฎฌ๋ ์ดํฐ์์ ๋น๋ํ๊ณ ์คํํ์ฌ, ํ์์ scrum.title
๋ทฐ๋ก ํ์ํ ์ ์๋์ง ํ์ธํ์ธ์.
SwiftUI๋ ์์ธ ๋ทฐ์ ์๋์ผ๋ก ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ์ ์ถ๊ฐํ๊ณ ์ด์ ํ๋ฉด์ ์ ๋ชฉ์ ์ฑ์๋๋ค.
๊ณ์ธตํ ์ฑ์์๋ ์์ ๋ทฐ์์ ์์ธ ๋ทฐ๋ก ์ด๋ํ์ฌ ํน์ ๋ฐ์ดํฐ ์์๋ฅผ ์กฐ์ํ ์ ์์ต๋๋ค. ์ด ์น์ ์์๋ ์คํฌ๋ผ ์์ธ ๋ทฐ๋ฅผ ์์ฑํ ๊ฒ์ ๋๋ค.
์๋ก์ด SwiftUI View ํ์ผ์ ์์ฑํ๊ณ ์ด๋ฆ์ DetailView.swift
๋ก ์ง์ ํ์ธ์.
scrum ์์๋ฅผ ์ถ๊ฐํ์ธ์.
ํ๋ฆฌ๋ทฐ ํ๋ก๋ฐ์ด๋์์ DetailView๋ฅผ ์ํ ์คํฌ๋ผ์ผ๋ก ์ด๊ธฐํํ์ธ์.
DetailView๋ฅผ NavigationStack์ผ๋ก ๊ฐ์ธ์ ์บ๋ฒ์ค์์ ๋ค๋น๊ฒ์ด์ ์์๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๋๋ก ํ์ธ์.
ScrumsView.swift
์์ NavigationLink
๋ฅผ ์
๋ฐ์ดํธํ์ฌ DetailView
๋ฅผ ์๋ก์ด ๋์์ผ๋ก ์ค์ ํ์ธ์.
์ด์ ์์ธ ๋ทฐ์ ํ ํ๋ฆฟ์ด ์ค๋น๋์์ผ๋ฏ๋ก, ์๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ์ฌ ์์ฑํ์ธ์. ์์ฑ๋ ์์ธ ๋ทฐ๋ ์คํฌ๋ผ์ ์ด๋ฆ, ํ์ ์๊ฐ, ์นด๋ ์์ ๋ฐ ์ฐธ์์ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.
DetailView.swift
์์ Text
๋ทฐ๋ฅผ List
๋ก ๊ต์ฒดํ์ฌ ํ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ํ์ธ์.
๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ์ด์ ์ ์ ํ์ ๋ทฐ๋ฅผ ํ์ผ๋ก ํ์ํ ๊ฒ์
๋๋ค. ์ด ํํ ๋ฆฌ์ผ์ ๋ค์ ์น์
์์๋ ๋ฆฌ์คํธ ํ์ ๋์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ๊ฒ์
๋๋ค.
"Meeting Info"๋ผ๋ ํค๋๋ฅผ ๊ฐ์ง ์น์ ์ ์ถ๊ฐํ์ธ์.
์น์ ์ ๋ฆฌ์คํธ ๋ด์์ ์๊ฐ์ ๊ตฌ๋ถ์ ์์ฑํฉ๋๋ค. ์น์ ์ ์ฌ์ฉํ๋ฉด ์ฝํ ์ธ ๋ฅผ ๋ฌถ์ด ์ ๋ณด๋ฅผ ๊ณ์ธต์ ์ผ๋ก ๊ทธ๋ฃนํํ ์ ์์ต๋๋ค.
"Start Meeting"์ด๋ผ๋ ํ
์คํธ์ ํ์ด๋จธ ์์ด์ฝ์ ํฌํจํ๋ Label
์ ์ถ๊ฐํ์ธ์.
์ด ํ์ ํญํด๋ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค. ํ์ง๋ง ๋์ค์ ์ฌ์ฉ์๋ฅผ ํ์ ๋ทฐ๋ก ํ์ํ ์ ์๊ฒ ํ ๊ฒ์
๋๋ค.
ํ
๊ธฐ๋ณธ์ ์ผ๋ก VoiceOver๋ Label
์ ์ ๋ชฉ์ ์ฝ์ต๋๋ค. VoiceOver๊ฐ ๋ ๋ง์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋๋ก ํ๋ ค๋ฉด ๊ธฐ๋ณธ ์์ฑ ํ
์คํธ๋ฅผ ๊ต์ฒดํ๊ณ ์์๋ฅผ ์ค๋ช
ํ๋ accessibilityLabel
์ ์ถ๊ฐํ์ธ์.
Label
์ ์ธ๊ด์ ๋ณ๊ฒฝํ๋ ค๋ฉด foregroundColor
์ font
์์ ์๋ฅผ ์ถ๊ฐํ์ธ์.
์ด ํ์ ์ํธ์์ฉ ๊ฐ๋ฅํ ์์์
๋๋ค. ๋ค๋ฅธ ์ํธ์์ฉ ์์์ ๋์ผํ ์์์ ์ฌ์ฉํ๋ ค๋ฉด accentColor
๋ฅผ ์ฌ์ฉํ์ธ์.
HStack
์ ์์ฑํ๊ณ , ํ์ ๊ธธ์ด๋ฅผ ๋ํ๋ด๋ ์๊ณ ์์ด์ฝ์ด ์๋ Label
์ ์ถ๊ฐํ์ธ์.
Spacer
๋ฅผ ์ถ๊ฐํ๊ณ , ํ์ ๊ธธ์ด ๊ฐ์ ํ
์คํธ ๋ทฐ์ ํ์ํ์ธ์.
HStack
์ accessibilityElement(children:)
๋ฅผ ์ถ๊ฐํ์ฌ ์ ๊ทผ์ฑ ์ฌ์ฉ์๋ฅผ ์ํด Label
๊ณผ Text
์์๋ฅผ ๊ฒฐํฉํ์ธ์.
VoiceOver๋ ๊ทธ๋ฌ๋ฉด ๋ ์์๋ฅผ ํ๋์ ๋ฌธ์ฅ์ผ๋ก ์ฝ์ต๋๋ค. ์๋ฅผ ๋ค์ด, โLength, 10 minutesโ์ ๊ฐ์ด ์ฝํ๋๋ค. ์์ ์๊ฐ ์์ผ๋ฉด VoiceOver ์ฌ์ฉ์๋ ๊ฐ ์์ ์ฌ์ด๋ฅผ ๋ค์ ์ค์์ดํํด์ผ ํฉ๋๋ค.
HStack
์ ์์ฑํ๊ณ , ์คํฌ๋ผ ์นด๋ ํ
๋ง๋ฅผ ๋ํ๋ด๋ ํ์ธํธ ํ๋ ํธ ์์ด์ฝ์ด ์๋ Label
์ ์ถ๊ฐํ์ธ์.
ํ ๋ง ๊ฐ์ ์ธํฐํ์ด์ค์ ํ์ํ๊ธฐ ์ ์, ํ์ฌ ๋ชจ๋ ์๋ฌธ์๋ก ์ ์๋
Theme
์ด๊ฑฐํ ์ผ์ด์ค๋ฅผ ๋๋ฌธ์๋ก ๋ณ๊ฒฝํ์ธ์.
Theme.swift
์์ ์์ ๊ฐ์ ๋๋ฌธ์๋ก ๋ณํํ๋ name
์์ฑ์ ์ถ๊ฐํ์ธ์.
DetailView.swift
์์ Spacer()
๋ฅผ ์ถ๊ฐํ๊ณ , Text
๋ทฐ์ ํ
๋ง ์ด๋ฆ์ ํ์ํ์ธ์. HStack
์ accessibilityElement(children:)
๋ฅผ ์ถ๊ฐํ์ฌ VoiceOver์์ Label
๊ณผ Text
์์๋ฅผ ๊ฒฐํฉํ์ธ์.
Text
๋ทฐ์ ์คํ์ผ์ ์ถ๊ฐํ๋ ค๋ฉด, ํจ๋ฉ, ์ ๊ฒฝ์ ๋ฐ ๋ฐฐ๊ฒฝ์, ๊ทธ๋ฆฌ๊ณ ๋ชจ์๋ฆฌ ๋ฐ๊ฒฝ์ ์ค์ ํ์ธ์
์์ธ ํ๋ฉด์ ์ถ๊ฐํ ๋ง์ง๋ง ์น์ ์ ์ฐธ์์ ๋ชฉ๋ก์ ๋๋ค.
ForEach
๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ปฌ๋ ์ ์์ ํ์์ ๋ฐ๋ผ ๋ทฐ๋ฅผ ์์ฑํ๋ViewBuilder
์ ๋๋ค. ์ด ์น์ ์์๋ForEach
๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ๋ฐ์ดํฐ์ ์ฐธ์์ ๋ชฉ๋ก์ ๋ฐ๋ณตํ์ฌ ์ผ๋ จ์ ํ ์คํธ ๋ทฐ๋ฅผ ๊ตฌ์ฑํ ๊ฒ์ ๋๋ค.
์คํฌ๋ผ ์ฐธ์์๋ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์ ์์ต๋๋ค.
List
์์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ๋ ๋ชจ๋ธ์ดIdentifiable
ํ๋กํ ์ฝ์ ์ค์ํ๋ฉด ์์ ์ ์ธ ์๋ณ์๋ฅผ ์์ฑํ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์.
DailyScrum.swift
์์ Identifiable
์ ์ค์ํ๋ ๋ด๋ถ ๊ตฌ์กฐ์ฒด Attendee
๋ฅผ ๊ฐ๋ ํ์ฅ์ ์์ฑํ์ธ์.
ํ์ id
์์ฑ๊ณผ name
์ ์ํ ๋ณ์๋ฅผ ์ถ๊ฐํ์ธ์.
id
์์ฑ์ ๊ธฐ๋ณธ๊ฐ์ ํ ๋นํ๋ ์ด๊ธฐํ์๋ฅผ ์ถ๊ฐํ์ธ์.
attendees
ํ์
์ [Attendee]
๋ก ์
๋ฐ์ดํธํ์ธ์. ๊ทธ๋ฐ ๋ค์, ์ด๊ธฐํ์์์ ์ฐธ์์ ์ด๋ฆ ๋ฐฐ์ด์ Attendee
ํ์
์ ๊ฐ์ผ๋ก ๋งคํํ์ธ์.
map(_:)
๋ ๊ธฐ์กด ์ปฌ๋ ์
์ ๊ฐ ์์์ ๋ณํ์ ์ ์ฉํ์ฌ ์๋ก์ด ์ปฌ๋ ์
์ ์์ฑํฉ๋๋ค.
์ด์ ์ฐธ์์ ์ด๋ฆ์ด ๊ณ ์ ํ๊ฒ ์๋ณ ๊ฐ๋ฅํ๋ฏ๋ก, ์ฐธ์์ ๋ชฉ๋ก์ ์์ธ ๋ทฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
DetailView.swift
์์ ์ฐธ์์ ์ ๋ณด๋ฅผ ๊ทธ๋ฃนํํ๊ธฐ ์ํด "Attendees"๋ผ๋ ํค๋๋ฅผ ๊ฐ์ง ์น์
์ ์์ฑํ์ธ์.
ForEach
๋ฅผ ์ถ๊ฐํ์ฌ ์ฐธ์์ ๋ชฉ๋ก์ ๋์ ์ผ๋ก ์์ฑํ๊ณ , scrum.attendees
๋ฅผ ๋ฐ์ดํฐ๋ก ์ ๋ฌํ์ธ์.
์ฐธ์์ ์ด๋ฆ์ ํ์ํ๊ณ ์ฌ๋ ์์ด์ฝ์ ์ถ๊ฐํ๋ Label
์ ์ถ๊ฐํ์ธ์.
์์ธ ํ๋ฉด์ด ์์ฑ๋์์ผ๋ฏ๋ก, ํ๋ฉด ๊ฐ ์ ํ์ ์ํ ๋ค๋น๊ฒ์ด์ ๊ณ์ธต์ ์์ฑํ ๊ฒ์ ๋๋ค.
ScrumsView.swift
์์NavigationLink
์ ๋์์DetailView
๋ก ์ค์ ํ์์ต๋๋ค. ์ด์ DetailView
์์MeetingView
๋ก์ ๋ค๋น๊ฒ์ด์ ๊ณ์ธต ์ค์ ์ ์๋ฃํ ๊ฒ์ ๋๋ค.
Start Meeting
๋ ์ด๋ธ์ NavigationLink
๋ก ๊ฐ์ธ๊ณ , MeetingView
๋ฅผ ๋ชฉ์ ์ง๋ก ์ค์ ํ์ธ์.
NavigationLink
๋ฅผ ์ถ๊ฐํ๋ฉด ๋ ์ด๋ธ์ด ์ ์ค์ฒ ์ธ์๊ธฐ๋ก ๊ฐ์ธ์ ธ, ์ฌ์ฉ์๊ฐ ์ด ํ์ ํญํ์ฌ ํ์ ํ์ด๋จธ ํ๋ฉด์ผ๋ก ์ ํํ ์ ์๊ฒ ๋ฉ๋๋ค.
List
์ .navigationTitle(scrum.title)
์ ์ค์ ํ์ฌ ์คํฌ๋ผ ์ ๋ชฉ์ ํ์ํ์ธ์.
์ฑ์ ์๋ฎฌ๋ ์ดํฐ์์ ์คํํ์ฌ ๋ฆฌ์คํธ, ์์ธ, ํ์ด๋จธ ํ๋ฉด ๊ฐ์ ํ์ํ ์ ์๋์ง ํ์ธํ์ธ์.
SwiftUI๋ ๋ค๋น๊ฒ์ด์ ์คํ์์ ํธ์(push) ๋ฐ ํ(pop)ํ ๋ ์๋์ผ๋ก ์ ๋๋ฉ์ด์ ์ ํฌํจํฉ๋๋ค.
์ด์ ํ๋ฉด ๊ฐ ์ ํ์ ์ํ ๋ค๋น๊ฒ์ด์ ๊ณ์ธต์ ์์ฑํ์ผ๋ฏ๋ก, ํ๋ฉด ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ด๋ํด์ผ ํฉ๋๋ค. ๋ค์ ํํ ๋ฆฌ์ผ์์๋ ๋ฐ์ดํฐ ํธ์ง, ์ ๋ฐ์ดํธ ๋ฐ ๋ค๋น๊ฒ์ด์ ์คํ์ ํตํ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ๊ฒ์ ๋๋ค.