- Today
- Total
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ๊ตฌ๊ธ ๊ฒ์ ์ฝ์
- ํด๋ผ์ฐ๋
- Pull
- RDS
- ์ ๋๋ฉ์ด์
- GitHub
- xcode
- commit
- dynamodbd์ rds ์ฐจ์ด์
- uikit
- push
- ์ฃ์ง ๋ก์ผ์ด์
- Git
- swift
- aws
- SwiftUI
- ios
- ๋ฆฌ์
- ์ปค๋ฐ
- ๋ฉ๋ชจ์ฅ
- Apple
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- EBS
- ์ธ์คํด์ค
- ๊ฐ์ฉ ์์ญ
- ์ปดํจํ
- JSON
- swiftui Tutorials
- ์ค๋ธ์
- hig
DEV_Larva
HACKING WITH SWIFT - WeSplit ๋ณธ๋ฌธ
๐ง๐ป์ด๋ฒ ์๊ฐ๋ถํฐ๋ ์ค์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด ๋ณด๋ฉด์ ์์ ๋ฐฐ์ด Swift์ ๊ธฐ๋ณธ์ ์ด์ฉํ์ฌ ์ค์ ์ฝ๋์ ๊ธฐ์ ํด๋ณผ ๊ฒ์ด๋ค!
ํด๋น ํ๋ก์ ํธ๋ ์ธ์์์ ๋จ๊ธฐ๊ณ ์ถ์ ํ์ ๊ธฐ์ค์ผ๋ก ๋ด์ผ ํ๋ ๊ธ์ก์ ๋ถํ ํ๋ ์ฑ์ผ๋ก์ ์ฐ๋ฆฌ๋๋ผ์์๋ ํ์ด๋ผ๋ ๊ฐ๋ ์ด ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ๋งํด "๋ฟ๋น ์ด", "๋์นํ์ด๐ธ" ์ฑ์ ๋ง๋๋ ๊ฒ์ด ๊ถ๊ทน์ ์ธ ๋ชฉํ์ด๋ค.
1. ํ๋ก์ ํธ ์์ฑ ๋ฐ ๊ตฌ์ฑ ์์
SwiftUI๋ก ์ ์ฑ์ ๋ง๋ค๊ธฐ ์ํด์๋ ์ผ๋จ ๋น์ฐํ Xcode๊ฐ ์ด์ฉ๋๋๋ฐ ์ด์ ์ ๊ฒฝ์ฐ Playground๋ฅผ ํตํด ์ค์ตํด๋ณด์์ง๋ง, ์ง๊ธ๋ถํฐ๋ ๋ฐ๋ก SwiftUI๋ฅผ ์ด์ฉํ์ฌ ํ๋์ ์ฑ์ ๊ตฌํํด๋ณด์.
๋จผ์ ๊ฐ๋ฐํ๋ ค๋ ์ฑ์ ์ด๋ฆ๊ณผ ๊ฐ๋ฐ ์ธ์ด ๋ฐ ์ ์ฅ ์์น ๋ฑ๋ฑ ์ค์ ํ๊ณ ๋๋ฉด
๋ฐ๋ก ์ด๋ ๊ฒ ๊ฐ๋ฐ์ ์์ํ ์ ์๋ ํ๊ฒฝ์ด ๋ง๋ค์ด์ง๊ฒ ๋๋ค. ์๋ง ์๋๋ก์ด๋๋ฅผ ๊ฐ๋ฐํด๋ดค๊ฑฐ๋ ํ๋ค๋ฉด ์ด๋ฐ ๊ณผ์ ์ ๊ธ๋ฐฉ ์ฝ๊ฒ ํ ์ ์์ ๊ฒ์ด๋ค.
๋จผ์ ์ผ์ชฝ์ ๋ณด๋ฉด Project Navigator๋ก ๋ถ๋ฆฌ๋ ๋ถ๋ถ์ด ์๋๋ฐ ์ฌ๊ธฐ์ ํ์ฌ ํ๋ก์ ํธ์์ ํ์ธํ ์ ์๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์บ๋ฒ์ค ๋ถ๋ถ์์๋ ํ์ฌ ํ์ด์ง์ ๋ํ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ์ ๊ณตํ ์ ์๋ค.
- WeSplitApp.swift์๋ ์ฑ์ ์์ํ๊ธฐ ์ํ ์ฝ๋๊ฐ ํฌํจ๋์ด ์๋ค. ์ฑ์ด ์คํ๋ ๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค๊ณ ๊ทธ๊ฒ์ ๊ณ์ ์ ์งํ๋ ค๊ณ ํ๋ฉด, ํด๋น ๋ถ๋ถ์ ์ฌ๊ธฐ์ ๊ฐ๋ฐํ๊ฒ ๋๋ค.
- ContentView.swift์๋ ํ๋ก๊ทธ๋จ์ ์ด๊ธฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ด ํ๋ก์ ํธ์์ ๊ฑฐ์ ๋ชจ๋ ์์ ์ ์ํํ ์์ ์ด๋ค.
- Assets.xcassets๋ ์ฑ์์ ์ฌ์ฉํ Assets ์นดํ๋ก๊ทธ์ด๋ค. ๋ํ ์ฑ ์์ด์ฝ, ์์ด๋ฉ์์ง ์คํฐ์ปค ๋ฑ๊ณผ ํจ๊ป ์์์ ์ถ๊ฐํ ์ ์๋ค.
- Preview Content๋ ๋ด๋ถ์ Preview Assets.xcassets๊ฐ ํฌํจ๋ ๊ทธ๋ฃน์ ๋๋ค. ์ด ๊ทธ๋ฃน์ ๋ค๋ฅธ Assets ์นดํ๋ก๊ทธ๋ก, ํนํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ค๊ณํ ๋ ์ฌ์ฉํ ์ด๋ฏธ์ง์ ๊ฐ์ด ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์ด๋ป๊ฒ ํ์๋๋์ง ์๋ ค ์ค๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์๋ ํนํ ์์์ ์ธ๊ธํ ContentView์์ ๋ชจ๋ ๊ฐ๋ฐ์ ์งํํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธํ ๋์ด์๋ ์ฝ๋์ ๋ํด์ ๊ฐ๋จํ ์์๋ณด์.
- import SwiftUI๊ฐ ๋ณด์ธ๋ค. ์ด๊ฑด Swift์ SwiftUI ํ๋ ์์ํฌ๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค. Apple์ ๊ธฐ๊ณ ํ์ต, ์ค๋์ค ์ฌ์, ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ ์์ ์ ์ํ ๋ง์ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. ๋์๊ด์์ ์ด๋ฏธ ์๊ฐ๊ฐ ์ด ์ฑ ์ ๋น๋ ค์ ์ฝ๋ ๊ฒ์ด๋ผ ์๊ฐํ๋ฉด ๋์ฑ ์ฝ๊ฒ ์ดํด๋ ๊ฒ ๊ฐ๋ค.
- struct ContentView: View๋ผ๋ ๊ตฌ์กฐ์ฒด๊ฐ ํ๋ ๋ณด์ธ๋ค. View๋ View ํ๋กํ ์ฝ๋ก ๊ตฌ์ฑ๋ ContentView๋ผ ๋ถ๋ฆฌ๋ ์๋ก์ด ๊ตฌ์กฐ์ฒด ํ๋๋ฅผ ๋ง๋ ๋ค. ์ฌ๊ธฐ์ View๋ SwiftUI์ ๊ธฐ๋ณธ ํ๋กํ ์ฝ์ด๋ค.
- var body: some View๋ body๋ผ๋ ์๋ก์ด ๊ณ์ฐ ์์ฑ์ ์ ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ some View๋ ์ฐ๋ฆฌ์ ๋ ์ด์์์ธ View ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ฒ์ ๋ฐํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- Text("Hello, world!")๋ "Hello, world!" ๋ฌธ์์ด์ ์ฌ์ฉํ์ฌ ํ ์คํธ ๋ณด๊ธฐ๋ฅผ ๋ง๋ ๋ค. Text View๋ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ์ ์ ํ ์คํธ์ ์์ ์กฐ๊ฐ์ผ๋ก ํ์์ ๋ฐ๋ผ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ์๋์ผ๋ก ์ค์ ๋ฐ๊พผ๋ค.
- ContentView ๊ตฌ์กฐ์ฒด ์๋์๋ PreviewProvider ํ๋กํ ์ฝ์ ์ค์ํ๋ ContentView_Previews ๊ตฌ์กฐ๊ฐ ํ์๋๋ค. ์ด ์ฝ๋๋ ์ค์ ๋ก ์ฑ ์คํ ์ด์ ์ฐ๊ฒฐ๋๋ ์ต์ข ์ฑ์ ์ผ๋ถ๊ฐ ์๋๋ผ ์ฝ๋์ ํจ๊ป UI ๋์์ธ์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ๋ณด์ฌ์ค ์ ์๋๋ก Xcode๊ฐ ์ฌ์ฉํ๋๋ก ํน๋ณํ ์ค๊ณ๋์๋ค.
2. ์์ ๋ง๋ค๊ธฐ
๋ง์ ์ฑ๋ค์ ์ฌ์ฉ์์๊ฒ ์ ๋ ฅ์ ์๊ตฌํ๊ฑฐ๋ ์ ๋ณด๋ฅผ ๋ณด์ฌ ์ค๋ค. ํ์ง๋ง ํ ์คํธ ํ๋, ๋ฒํผ, ๋ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ๋ํํ ์ปจํธ๋กค์ ํฌํจํ ์ ์๋ค. ๊ทธ๋ผ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๋์ฑ ํจ๊ณผ์ ์ด๊ณ ์ฝ๊ฒ ํํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์ธ ์ ์๋ค.
- Form
var body: some View {
Form {
Text("Hello, world!")
.padding() //Form์ ์ฐ๋ฉด ํจ๋ฉ๋ ์ ๊ฑฐ ํ ์์๋ค.
}
}
Form์ ๊ธฐ๋ณธ ํ ์คํธ ๋ณด๊ธฐ๋ฅผ ๋ด๋ถ์ ๋ํํจ์ผ๋ก์จ ๊ธฐ๋ณธ ์์์ ๋ง๋ค ์ ์๋ค.
๋ฐ๋ก ์บ๋ฒ์ค์์ ํด๋น ๋ณ๊ฒฝ์ฌํญ ๋ํ ์ดํด๋ณด์!
๊ธฐ์กด์๋ ํฐ์ ๋ฐํ์ ์ค์์ Hello World ๊ฐ ์๋ฆฌํ๊ณ ์์์ง๋ง Form์ ํตํด ๋ฐํ์ด ๋ฐ์ ํ์์ด๊ณ Hello World์ ์์น ๋ํ ์๋จ์ผ๋ก ์ฌ๋ผ๊ฐ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ฌ๊ธฐ์ ํ ๊ฐ๊ฐ ์๋ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ค์ ํ ์ ์์๊น? ๊ทธ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ์ด๋ฒ์๋ Hello World๋ฅผ
Form {
Text("Hello, world!")
Text("Hello, world!")
Text("Hello, world!")
Text("Hello, world!")
Text("Hello, world!")
Text("Hello, world!")
Text("Hello, world!")
Text("Hello, world!")
Text("Hello, world!")
Text("Hello, world!")
}
์ด๋ ๊ฒ ํ๋ฉด???
์๋ฐ ์์ผ๋ก ํ๋์ Form์์ 10๊ฐ์ ํ ์คํธ๊ฐ ๊ฐ๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์๋ฌธ์ 11๊ฐ, 12๊ฐ ๊ทธ ์ด์์ ๋ชปํ ๊น?
SwiftUI๋ ํ๋์ Form์์ 10๋ช ์ด์์ ์์์ ๋ํด ์ ํ์ ๋์๋๋ฐ ์ด๊ฒ์ Form ๋ง๊ณ ๋ ๋ค๋ฅธ ๊ณณ์์๋ ์ ์ฉ๋๋ค. ๋ฐ๋ผ์ Form์์๋ 10๊น์ง๋ง! ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- Group
๊ทธ๋ ๋ค๋ฉด Form์์ 10๊ฐ ๋ณด๋ค ๋ ๋ง์ ํญ๋ชฉ์ ์ถ๊ฐ์ํค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
๊ทธ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก Group์ด๋ค.
๊ทธ๋ฃน์ ์ค์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ๋ณด์ด๋ ๋ฐฉ์์ ๋ณ๊ฒฝํ์ง ์๊ณ , Form์ ์ ํ์ ํด๊ฒฐํ ์ ์๋๋ก ํ๋ค.
์ด๋ ์บ๋ฒ์ค๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ค๋ฅด๊ฒ ๋ณด์ด๋ ๊ฒ์ ๋ฐ๋ก ์์ง๋ง ๋ง ๊ทธ๋๋ก Form์ ๊ฐ์ ์ ํ์์ ๋ฒ์ด๋ ์ํ๋ ๋งํผ ํ ์คํธ ๋ฐ์ค๋ฅผ ์ถ๊ฐํ ์ ์๊ฒ ๋๋ค. ํ์ง๋ง ํ ํ์ด์ง์ ๋๋ฌด ๋ง์ ํ ์คํธ ๋ฐ์ค๋ ๊ฐ๋ ์ฑ ์ธก๋ฉด์์๋ ์คํ๋ ค ๋ณ๋ก์ผ ์๋ ์๋ค.
- Section
๊ทธ๋ผ ํญ๋ชฉ์ ๋ถ๋ฆฌํ์ฌ Form์ด ๋ค๋ฅด๊ฒ ๋ณด์ด๊ฒ ํ ์๋ ์๋?
๊ทธ๋ด ๋๋ Section์ด๋ผ๋ ๊ฑธ ์ด์ฉํ๋ฉด ๋๋ค. ์ด๊ฑด Form์ด ๊ฐ๋ณ์ ์ผ๋ก ์๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋ถํ ๋๊ฒ ๋๋ค.
Form {
Section {
Text("Hello, world!")
}
Section {
Text("Hello, world!")
Text("Hello, world!")
}
}
3. ๋ด๋น๊ฒ์ด์ ๋ฐ ์ถ๊ฐ
์ฐ๋ฆฌ๋ ์ํ๋ค๋ฉด iOS๋ฅผ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ์๋จ์ ์๊ณ์ ํ๋จ์ ํ ํ์๊ธฐ๋ฅผ ํฌํจํ ํ๋ฉด์ ์๋ฌด ๊ณณ์๋ ์ฝํ ์ธ ๋ฅผ ๋ฐฐ์นํ ์ ์๋ค. ํ์ง๋ง ๋ณด๊ธฐ์ ์ข์๊น? ๊ทธ๋ฌ๋ค๋ฉด ์ด๋ ํ ์ฑ์ ์ด์ฉํ๋๋ผ๋ ์ด์ง๋ฌ์ ๋ณด์ด๊ณ ์ ์ ์์ด ๋ณด์ผ ๊ฒ ๊ฐ์๋ฐ, ์ฌ๊ธฐ์ SwiftUI ๋๋ ์์คํ UI๊ฐ ๋ฅ๊ทผ ๋ชจ์๋ฆฌ๋ก ๊ฐ๋ฆด ์ ์๋ ์์ญ์ ๋ฐฐ์น ๋ฎ์ ์ ์๋ ์์ญ, ์์ ์์ญ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฒ์ ๋ฐฐ์นํ๋ ์ด์ ์ด๋ค.
์๋ฅผ ๋ค์ด iPhone13์์ ์์ ์์ญ์ ๋ ธ์น ๋ฐ๋ก ์๋์์ ํ ํ์๊ธฐ ๋ฐ๋ก ์๊น์ง์ ์์ญ์ด๋ค. ๊ทธ ์์์๋ ๊ฐ๋ฐ์๊ฐ ์ํ๋๋๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ์๊น ์์์ ๋ฐฐ์ ๋ Section ํํธ๋ฅผ ํ๋ฒ ios ์๋ฎฌ๋ ์ดํฐ๋ก ์คํํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ ์์ญ์ด ์ด๋ ์๋์ง ๋์ฑ ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ์ฑ์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ์, ์๋, ์ข์ฐ๋ก ์ค์์ดํ ํ๋ ๊ฒฝ์ฐ๋ ํฐ ์์ฒด๋ฅผ ํ์ ์ํฌ์๋ ์๋ค. ๊ทธ๋ฐ๋ฐ ํ์ฌ ์ํ์์๋ ์์ชฝ์ ์๋ ์๊ฐ ๋ถ๋ถ์ด๋ ๋ฐฐํฐ๋ฆฌ ํ์๊ธฐ์ ๊ฐ์ ๋ถ๋ถ์ ํด๋น ๋ทฐ๋ค์ด ๊ฐ์ด ์์ผ ๋ ๋ค ์ฝ๊ธฐ ์ด๋ ค์์ง๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ณต๋ถ๋ฅผ ์ง๊ธ๋ถํฐ ํด๋ณด์!
์ฌ๊ธฐ์ ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ๊ธฐ ์ํด์๋ ํ๋ฉด ์๋จ์ ๋ด๋น๊ฒ์ด์ ๋ฐ๋ฅผ ๋ฐฐ์นํ๋ ๊ฒ์ด๋ค. ๋ด๋น๊ฒ์ด์ ๋ฐ๋ ์ ๋ชฉ๊ณผ ๋ฒํผ์ด ์์ ์ ์๊ณ , SwiftUI์์๋ ์ฌ์ฉ์๊ฐ ์์ ์ ์ํํ ๋ ์๋ก์ด View๋ฅผ ํ์ํ ์ ์๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
NavigationView {
Form {
Section {
Text("Hello, world!")
}
}
}
}
์ด์ ์ Sectionํํธ์์ ์ฌ์ฉํ ์ฝ๋์ NavigationView ๋ด๋ถ์ ๋ชจ๋ ์ง์ด ๋ฃ์ผ๋ฉด ์ฐ๋ฆฌ๋ ๋ฒ์จ ์ฝ๊ฒ ๋ด๋น๊ฒ์ด์ ๋ฐ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ด๋ค. ๋ฐ๋ก ์คํํ์ฌ ํ์ธํด๋ณด๋ฉด ์๋ง ๊ทธ ์ฐจ์ด๋ฅผ ๋ถ๋ช ํ ๋๋ ์ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด๋ฒ์๋ ์ด๋ ๊ฒ ์ค์ ํ ๋ค๋น๊ฒ์ด์ ๋ฐ์ ์ ๋ชฉ์ ํ๋ฒ ๋ฃ์ด๋ณด์!
์ฌ๊ธฐ์๋ ์์ ๋ฐฐ์ ๋ Modifier์ ์ถ๊ฐํ๊ฒ ๋๋๋ฐ ์ฝ๋๋ก ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
NavigationView {
Form {
Section {
Text("Hello, world!")
}
}
.navigationTitle("SwiftUI Test")
}
. navigationTitle()์ Form์ ์ถ๊ฐํ๋ฉด์ Swift๋ ๋ด๋น๊ฒ์ด์ ์ ๋ชฉ๊ณผ ๊ธฐ์กด ํญ๋ชฉ๋ค์ด ์๋ ์๋ก์ด Form์ ํ๋ ์์ฑํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ์ ๋ ๋ค๋ฅธ Modifier์ ์ถ๊ฐ๋ก ์ค์ ํ์ฌ ๊ธ๊ผด๋ ๋ฐ๊ฟ ์ ์๋๋ฐ
.navigationBarTitleDisplayMode(.inline)
์ฌ๊ธฐ์๋ ์์ ๊ธ๊ผด๋ก ์ค์ ํด๋ณด์๋ค.
learning by repetition
'SwiftUI & UIKit > Tutorials' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HACKING WITH SWIFT - Guess the Flag(3) (0) | 2022.09.03 |
---|---|
HACKING WITH SWIFT - Guess the Flag(2) (0) | 2022.09.03 |
HACKING WITH SWIFT - Guess the Flag (0) | 2022.08.31 |
HACKING WITH SWIFT - WeSplit(3) (0) | 2022.08.23 |
HACKING WITH SWIFT - WeSplit(2) (0) | 2022.08.18 |