π μ΄ κΈμ Apple Developer Documentation - SwiftUI App Dev Tutorialsλ₯Ό ChatGPTλ₯Ό ν΅ν΄ λ²μνμ¬ μμ±λμμμ μλ €λ립λλ€.
Scrumdingerλ μ¬μ©μκ° μ°Έμνλ μΌμΌ μ€ν¬λΌ λͺ©λ‘μ μ μ§νλ©°, μ΄ λͺ©λ‘μ λ£¨νΈ λ·°μ νμν©λλ€.
μ΄ νν 리μΌμμλ μΌμΌ μ€ν¬λΌ μμ½μ νμνλ
CardView
λ₯Ό λ§λ€ κ²μ λλ€. λ€μ νν 리μΌμμλList
λ·°λ₯Ό λ§λ€μ΄ κ° νμ μ΄CardView
λ₯Ό μ¬μ©νλ λ°©λ²μ λ°°μΈ κ²μ λλ€.Section 1. Create a color theme
νλ‘μ νΈ λ΄λΉκ²μ΄ν°μμ μλ‘μ΄ κ·Έλ£Ήμ μμ±νκ³ μ΄λ¦μ Models
λ‘ μ€μ ν©λλ€.
Models
κ·Έλ£Ή μμ μλ‘μ΄ Swift νμΌμ μμ±νκ³ μ΄λ¦μ Theme.swift
λ‘ μ€μ ν©λλ€.
Foundation
νλ μμν¬ λμ SwiftUI
νλ μμν¬λ₯Ό μν¬νΈν©λλ€.
μ΄ μΉμ
μμλ λ·°λ₯Ό μμ±νμ§ μμ§λ§, SwiftUI
νλ μμν¬μμ Color
μμ±μ μΆκ°ν©λλ€. SwiftUIλ μμμ λ·° μΈμ€ν΄μ€λ‘ μ·¨κΈνλ―λ‘ λ·° κ³μΈ΅μ μ§μ μΆκ°ν μ μμ΅λλ€.
String
νμ
μ μμ κ°μ κ°λ Theme
λΌλ μ΄λ¦μ μ΄κ±°νμ λ§λλλ€.
Swiftλ Theme
μ μΆκ°νλ κ° μΌμ΄μ€ μ΄λ¦κ³Ό μΌμΉνλ λ¬Έμμ΄μ μλμΌλ‘ μμ±ν©λλ€.
μ»΄νμΌλ¬λ μ΄κ±°νμ΄ μμ νμ μ μ μΈνλ €λ©΄ μΌμ΄μ€λ₯Ό κ°μ ΈμΌ νκΈ° λλ¬Έμ μ€λ₯λ₯Ό λ°μμν΅λλ€.
μ€νν° νλ‘μ νΈμλ μμ μΉ΄νλ‘κ·Έκ° ν¬ν¨λμ΄ μμΌλ©°, κ° μμμ λν RGBA κ°μ΄ μ μλμ΄ μμ΅λλ€.
μμ
μΉ΄νλ‘κ·Έμ Themes
ν΄λμ λμ΄λ κ° μμμ λν μΌμ΄μ€λ₯Ό μΆκ°ν©λλ€.
μμ
μΉ΄νλ‘κ·Έμμ λͺ
λͺ
λ μμμ μ½λμμ μ°Έμ‘°λλ μ΄λ¦κ³Ό μΌμΉν΄μΌ νλ―λ‘, κ° μΌμ΄μ€λ₯Ό μ ννκ² μ
λ ₯νμΈμ.
self
μ κ°μ λ°λΌ .black
λλ .white
λ₯Ό λ°ννλ accentColor
λΌλ μ΄λ¦μ Color
μμ±μ μΆκ°ν©λλ€.
accentColor
λ ν
λ§μ μ£Όμ μμκ³Ό λμ λλΉλ₯Ό μ 곡νμ¬ λ·°κ° μ κ·Όμ±μ μ μ§ν μ μλλ‘ ν©λλ€.
μ΄κ±°νμ μμ κ°μ μ¬μ©νμ¬ μμμ μμ±νλ mainColor
λΌλ μ΄λ¦μ Color
μμ±μ μΆκ°ν©λλ€.
μ΄ μμ±μ μμ
μΉ΄νλ‘κ·Έμμ μμμ μ΄κΈ°νν©λλ€.
DailyScrum
λͺ¨λΈμ λ€μ λ€ κ°μ§ μμ±μ ν¬ν¨ν©λλ€: title
, attendees
, lengthInMinutes
, κ·Έλ¦¬κ³ theme
. μ΄ μμ±λ€μ λͺ¨λ κ°λ¨ν κ° νμ
μ κ°μ§κ³ μμ΅λλ€. DailyScrum
μ λ°μ΄ν° κ°μ μ£Όλ‘ ν¬ν¨νλ―λ‘, μ΄λ₯Ό struct
λ‘ μ μΈνμ¬ κ° νμ
μΌλ‘ λ§λ€ κ²μ
λλ€.
Models
κ·Έλ£Ήμ DailyScrum
μ΄λΌλ μ΄λ¦μ μ Swift νμΌμ μΆκ°ν©λλ€.
title
, attendees
, lengthInMinutes
, λ° theme
μμ±μ κ°μ§ DailyScrum
ꡬ쑰체λ₯Ό μμ±ν©λλ€.
μν λ°μ΄ν°λ₯Ό μ 곡νλ νμ₯μ μΆκ°ν©λλ€.
CardView
λ DailyScrum
λͺ¨λΈ λ°μ΄ν°λ₯Ό μμ½νμ¬ μ λͺ©, μ°Έκ°μ μ, κ·Έλ¦¬κ³ μ§μ μκ°μ νμν©λλ€. CardView
λ DailyScrum
ꡬ쑰체μ λ°μ΄ν°λ₯Ό μ‘°κ°λ³λ‘ νμνλ λ μμ λ·°λ€λ‘ ꡬμ±λ©λλ€.
λ·°λ₯Ό κ°λ°νλ©΄μ μ¦κ°μ μΈ μκ°μ νΌλλ°±μ λ°μ μ μλλ‘ CardView_Previews
ꡬ쑰체λ₯Ό μ
λ°μ΄νΈν κ²μ
λλ€.
CardView
λΌλ μ΄λ¦μ μ SwiftUI λ·° νμΌμ μΆκ°ν©λλ€.
νλ¦¬λ·°κ° μΌμ μ€μ§λ κ²½μ°, μ½λλ₯Ό λ³κ²½ν λ ν리뷰μμ λ³κ²½ μ¬νμ νμΈν μ μλλ‘ ν리뷰λ₯Ό λ€μ μμν μ μμ΅λλ€.
DailyScrum
νμ
μ scrum
μ΄λΌλ μμλ₯Ό μΆκ°ν©λλ€.
μ»΄νμΌλ¬λ CardView()
μ΄κΈ°νμκ° μ΄μ DailyScrum
λ§€κ°λ³μλ₯Ό μꡬνκΈ° λλ¬Έμ μ€λ₯λ₯Ό λ°μμν΅λλ€.
CardView_Previews
μμ scrum
μ΄λΌλ μ΄λ¦μ μ μ λ³μλ₯Ό μμ±νκ³ , μ΄λ₯Ό CardView
μ΄κΈ°νμμ μ λ¬ν©λλ€.
scum.theme.mainColor
λ₯Ό μ¬μ©νμ¬ ν리뷰μ λ°°κ²½ μμμ μ§μ ν©λλ€.
previewLayout
μμ μλ₯Ό μ¬μ©νμ¬ ν리뷰μ λλΉλ₯Ό 400, λμ΄λ₯Ό 60μΌλ‘ μ€μ ν©λλ€.
ν리뷰 λ μ΄μμκ³Ό λ°°κ²½ μμμ μ€μ νλ©΄ CardView
κ° List
λ·° μμμ μ΄λ»κ² λνλ μ§λ₯Ό 미리 λ³Ό μ μμ΅λλ€. λ€μ νν 리μΌμμλ List
μμ μ΄ λ·°λ₯Ό ν¬ν¨ν κ²μ
λλ€.
μΊλ²μ€ μ€μ μ Liveμμ Selectableλ‘ λ³κ²½ν©λλ€.
Text
λ·°λ₯Ό μ
λ°μ΄νΈνμ¬ scrum
μ μ λͺ©μ νμνκ³ , κΈκΌ΄ μ€νμΌμ headline
μΌλ‘ μ€μ ν©λλ€.
Text
λ·°λ₯Ό VStack
μμ μ½μ
νκ³ , leading
μ λ ¬μ μ€μ ν©λλ€.
VStack
μ μμ λ·°λ₯Ό μμ§μΌλ‘ λ°°μ΄νλ©°, λ·°λ₯Ό μν μΆμ λ§μΆ° λ°°μΉνκΈ° μν΄ μ λ ¬ μΈμλ₯Ό μ¬μ©ν©λλ€.
Spacer
λ₯Ό μΆκ°νκ³ , μ°Έμμ μλ₯Ό νμνλ Label
μ ν¬ν¨νλ HStack
μ μΆκ°ν©λλ€.
Label
κ³Ό Image
λ SF Symbolμ μ½κ° λ€λ₯Έ λ§€κ°λ³μ λ μ΄λΈμ μ¬μ©ν©λλ€. λ·°λ₯Ό μ λ ¬νκΈ° μν΄ μ¬μ©ν Image
λ Image(systemName:_)
μ μ¬μ©νλ λ°λ©΄, Label(_:systemImage:)
μ μ¬μ©ν©λλ€.
HStack
μ λ λ€λ₯Έ Label
μ μΆκ°νκ³ , κ·Έ μμ€ν
μ΄λ―Έμ§λ₯Ό "clock"μΌλ‘ μ€μ ν©λλ€.
λΌλ²¨μ μμ νμ¬ νμ κΈΈμ΄λ₯Ό νμν©λλ€.
λ·°λ μμ± κ²μ¬κΈ°λ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ μν μ μμΌλ©°, μ½λκ° μ΄μ λ°λΌ μ
λ°μ΄νΈλ©λλ€. λλ μ½λλ₯Ό μ§μ λ³κ²½νμ¬ μμ±μ μμ ν μ μμ΅λλ€. λ κ²½μ° λͺ¨λ, ν리뷰λ λ³κ²½ μ¬νμ λ°μνμ¬ μ
λ°μ΄νΈλ©λλ€.
λ μ΄λΈ μ¬μ΄μ Spacer
λ₯Ό μΆκ°νμ¬ μ 보λ₯Ό λ·°μ κ°μ₯μ리 μ£Όμμ λ°°μΉν©λλ€.
μΉ΄λ λ·°λ μΌμΌ μ€ν¬λΌμ λν μ 보λ₯Ό νμν©λλ€. μ΄ μΉμ μμλ κ°μ₯ μ€μν μ 보λ₯Ό κ°μ‘°νκΈ° μν΄ μΉ΄λλ₯Ό μ€νμΌλ§νκ³ , ν μ€νΈμ λ°°κ²½ λ·° μ¬μ΄μ μΆ©λΆν λλΉλ₯Ό 보μ₯νκΈ° μν΄ μκ°μ κ΅¬μ± μμλ₯Ό μμ ν κ²μ λλ€. μ΄ μμ μ λ°μ λͺ¨λμ μ΄λμ΄ λͺ¨λμμ λͺ¨λ μ μ©λ©λλ€.
νμ κΈΈμ΄ λΌλ²¨μ 20 ν¬μΈνΈμ μ€λ₯Έμͺ½ ν¨λ©μ μΆκ°ν©λλ€.
λ·°μ .leading
, .top
, λ° .bottom
κ°μ₯μ리μλ ν¨λ©μ μΆκ°ν μ μμ΅λλ€.
HStack
μμ μλ λͺ¨λ ν°νΈλ₯Ό μΊ‘μ
μ€νμΌλ‘ μ€μ ν©λλ€.
λ μ΄λΈκ³Ό μ΄λ―Έμ§μμ μ¬μ©λλ SF Symbolsλ ν°νΈμ λκ»μ ν¬κΈ° λ³νμ λ°λΌ μ μ νκ² ν¬κΈ°κ° μ‘°μ λκ³ μ λ ¬λ©λλ€.
VStackμ ν¨λ©μ μΆκ°νμ¬ λͺ¨λ μ½ν
μΈ λ₯Ό κ°μ₯μ리μμ λ©λ¦¬ μ΄λμν΅λλ€.
Xcodeμ ν리뷰 λͺ¨λλ₯Ό Selectable
μμ Color Scheme Variants
λ‘ λ³κ²½νμ¬ λ·°λ₯Ό λ°μ λͺ¨λμ μ΄λμ΄ λͺ¨λμμ λ λλ§ν©λλ€.
κΈ°λ³Έμ μΈ λ°μ ν
μ€νΈκ° μ΄λμ΄ λͺ¨λμμ λ
Έλμ λ°°κ²½κ³Ό μΆ©λΆν λλΉλ₯Ό μ 곡νμ§ μμ΅λλ€.
scrum.theme.accentColor
λ₯Ό μ¬μ©νμ¬ foregroundColor
λ₯Ό μ€μ ν©λλ€.
Theme.swift
μμ μ μλ accentColor
λ³μλ λ°μ μμμ ν
λ§μλ κ²μμμ, μ΄λμ΄ μμμ ν
λ§μλ ν°μμ λ°νν©λλ€.
foregroundColor
λ μ£Όλ‘ text color λ₯Ό λ³κ²½ν λ μ¬μ©ν©λλ€.
λ€μμΌλ‘, μ€ν¬λΌ κΈΈμ΄μ μκ³ μμ΄μ½μ κ°λ‘λ‘ μκΈ° μν λΌλ²¨ μ€νμΌμ μμ±ν κ²μ λλ€.
LabelStyle
νλ‘ν μ½μ μ¬μ©νμ¬ μ¬λ¬ λ·°μμ λμΌν λΌλ²¨ μ€νμΌμ μ¬μ¬μ©νμ¬ μ± μ λ°μ μΌκ΄λ λμμΈμ λ§λ€ μ μμ΅λλ€.
TrailingIconLabelStyle.swift
λΌλ μ΄λ¦μ μ Swift νμΌμ μμ±ν©λλ€.
SwiftUIλ₯Ό μν¬νΈν©λλ€.
LabelStyle
μ μ€μνλ TrailingIconLabelStyle
μ΄λΌλ μλ‘μ΄ κ΅¬μ‘°μ²΄λ₯Ό μμ±ν©λλ€.
λ§μ½ μ¬μ©μ μ μ λΌλ²¨ μ€νμΌμ λ§λ€κ³ μΆμ§ μλ€λ©΄, μμ€ν
νμ€ λ μ΄μμμ μ¬μ©νμ¬ μμ΄μ½κ³Ό μ λͺ©μ λͺ¨λ νμνλ λ΄μ₯λ λΌλ²¨ μ€νμΌ μ€ νλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
λΉ makeBody(configuration:)
ν¨μλ₯Ό μμ±ν©λλ€.
μμ€ν
μ μ΄ μ€νμΌμ΄ νμ¬ λΌλ²¨ μ€νμΌμΈ λ·° κ³μΈ΅μ κ° Label
μΈμ€ν΄μ€μ λν΄ μ΄ λ©μλλ₯Ό νΈμΆν©λλ€.
HStack
μ μΆκ°ν©λλ€.
HStack
μμ configuration.title
κ³Ό configuration.icon
μ μΆκ°ν©λλ€.
configuration
λ§€κ°λ³μλ LabelStyleConfiguration
μΌλ‘, μ΄ κ°μ²΄λ μμ΄μ½κ³Ό μ λͺ© λ·°λ₯Ό ν¬ν¨νκ³ μμ΅λλ€. μ΄ λ·°λ€μ λΌλ²¨μ μ΄λ―Έμ§μ ν
μ€νΈλ₯Ό λνλ
λλ€.
LabelStyle
μ trailingIcon
μ΄λΌλ μ΄λ¦μ μ μ μμ±μ μμ±νλ νμ₯μ μΆκ°ν©λλ€.
μ μ μμ±μΌλ‘ λΌλ²¨ μ€νμΌμ μ μνκΈ° λλ¬Έμ, μ΄λ₯Ό μ νκΈ°λ²(leading-dot syntax)μ μ¬μ©νμ¬ νΈμΆν μ μμ΄ μ½λκ° λ μ½κΈ° μ¬μμ§λλ€.
CardView.swift
νμΌμμ lengthInMinutes
λΌλ²¨μ μλ ν¨λ©μ μλ‘μ΄ λΌλ²¨ μ€νμΌλ‘ λ°κΏλλ€.
μ΄μ μκ³ μμ΄μ½μ΄ κ°μ₯μ리μ μ λ ¬λμ΄ μ°Έμμ μλ₯Ό λνλ΄λ μ ν λΌλ²¨κ³Ό λμΉμΌλ‘ λ°°μΉλ©λλ€.
μ΄μ
CardView
κ° μκ°μ μΌλ‘ λ°°μΉλμμΌλ―λ‘, λͺ¨λ μ¬μ©μκ° μ κ·Όν μ μλλ‘ κ°μ ν μ°¨λ‘μ λλ€. μ κ·Όμ± μμ μλ₯Ό λ·°μ μΆκ°νμ¬ VoiceOverλ₯Ό ν΅ν΄ μΈν°νμ΄μ€λ₯Ό μ΄ν΄νκ³ νμνλ κ²μ λ μ½κ² λ§λ€μ΄ μ€ κ²μ λλ€.
CardView
μλ νμ κΈΈμ΄λ₯Ό λνλ΄λ μκ³ μ΄λ―Έμ§μ μ«μκ° ν¬ν¨λ λΌλ²¨κ³Ό μ°Έμμ μλ₯Ό λνλ΄λ μ¬λ μ΄λ―Έμ§μ μ«μκ° ν¬ν¨λμ΄ μμ΅λλ€.λ¬Έμμ΄ λ³΄κ°λ²μ μ¬μ©νλ μ κ·Όμ± λΌλ²¨μ μΆκ°νμ¬ λΌλ²¨μ΄ λ·°μ λν μλ―Έ μλ μ€λͺ μ΄ λλλ‘ ν κ²μ λλ€. VoiceOverλ "4 attendees"μ "10 minute meeting"μ΄λΌκ³ μ½μ΄μ€λλ€.
μ€ν¬λΌμ μ λͺ©μ νμνλ ν
μ€νΈ λ·°μ accessibilityAddTraits(.isHeader)
μμ μλ₯Ό μ μ©ν©λλ€.
μ΄ μμ μλ λ·°μ μ 보 ꡬ쑰λ₯Ό μ λ¬νλ λ° λμμ μ£Όλ©°, μ€ν¬λΌ μ λͺ© λ€μ βheadingβμ΄ μ½νλλ‘ ν©λλ€.
첫 λ²μ§Έ Label
μ λ΄μ©μ μ€λͺ
νλ λΌλ²¨μ μΆκ°νκΈ° μν΄ μ κ·Όμ± μμ μλ₯Ό μ¬μ©ν©λλ€.
λ λ²μ§Έ Label
μλ μ μ¬ν μ κ·Όμ± μμ μλ₯Ό μΆκ°ν©λλ€.
λ€μ νν 리μΌμμλ
CardView
λ₯Ό SwiftUIList
λ΄μμ μ¬μ©νλ λ°©λ²μ 보μ¬μ€λλ€. SwiftUIκ° μ΄λ»κ² λ°©κΈ λ§λ κ²κ³Ό κ°μ μμ λ·°λ€μ μ‘°ν©νμ¬ ν° λ³΅μ‘ν λ·°λ₯Ό μ½κ² ꡬμ±ν μ μλμ§λ₯Ό λ°°μΈ κ²μ λλ€.