์ฐธ๊ณ ์ฌ์ดํธ ๋ฐ ์ถ์ฒ https://www.youtube.com/watch?v=ZQXzZ1hxQwo ์ ์๋ณธ ์์์ ์ฐธ๊ณ ํ์๋ฉด ๋ ์์ธํ ์ ์ ์์ต๋๋ค! ์ ์์์ด ์์ด ํด๋น ํฌ์คํ
์ ๊ณต๋ถํ๋ค ์๊ฒ๋ ์ ๋ง ์ ์ด ๋์์ต๋๋ค. NavigationLink NavigationLink๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋น๊ฒ์ด์
์คํ์ ์์ ์ ์์ NavigationView { VStack { NavigationLink(value: , label: View#>) } .padding() } value ๋ ์ด๋ ์ํค๊ธฐ ์ํด ๋งํฌ๋ฅผ ๊ฑธ ๋ทฐ, label์ ์คํ์ผ๋ก ์์ ๋ทฐ๋ฅผ ํด๋ก์ ๋ก ์ ๋ฌ NavigationView { VStack { NavigationLink { Text("๋ ๋ฒ์งธ ๋ทฐ") } label: { Text("์ฒซ ๋ฒ์งธ ๋ทฐ") ..
TextField keyboardType modifier๋ ์ฌ์ฉ์์ ์
๋ ฅ์ ๋ฐ๋ ํค๋ณด๋์ ํ์
์ ์ง์ ํ ์ ์์ TextField("ํ
์คํธ") .keyboardType(.asciiCapable) ์๋ฌธ, ์ซ์, ํน์ ๋ฌธ์ ์
๋ ฅ๋ง ๊ฐ๋ฅํจ (ํ๊ธ, ์ด๋ชจํฐ์ฝ ๋ถ๊ฐ ์์คํค๋ง ๊ฐ๋ฅ) ์ซ์ ๋ฐ ๊ตฌ๋์ default๋ก ์ซ์์ ํน์๋ฌธ์๊ฐ ํ์๋๋ฉฐ ํ๊ธ๊ณผ ์์ด ์
๋ ฅ ๊ฐ๋ฅ ์ฌ์ฉ์๊ฐ URL์ ์
๋ ฅํ๊ธฐ ์ฝ๊ฒ ํ๋จ์ ํน์ ๋ฌธ์๋ฅผ ์ ๊ณตํจ ์ซ์๋ง ์
๋ ฅ ๊ฐ๋ฅ ์์์ ์
๋ ฅ์ด ๊ฐ๋ฅํ๋๋ก ์ซ์์ decimal point ์ ๊ณต ์ซ์ ํค๋ณด๋์ ํด๋ํฐ ๋ฒํธ ์
๋ ฅ์ ์ฌ์ฉ๋๋ ํน์ ๋ฌธ์ ์ ๊ณต ์ด๋ฆ๊ณผ ํด๋ํฐ ๋ฒํธ ์
๋ ฅ์ด ๊ฐ๋ฅํ๋๋ก ๋ ๊ฐ์ง ํค๋ณด๋๋ฅผ ์ ๊ณตํจ (์ด๋ชจ์ง, ์์ด ๊ฐ๋ฅ) ์ด๋ฉ์ผ ์ฃผ์ ์
๋ ฅ์ ์ฌ์ฉ๋๋ @์ . ํน์ ๋ฌธ์๋ฅผ ํ๋จ์ ๋ฐฐ์นํ ํค๋ณด๋ ..
Info.plist contained no UIScene configuration dictionary ํ๋ก์ ํธ > Targets > Info.plist > Custom iOS Target Properties > Application Scene Manifest์์ Scene Configuration ์ ์ถ๊ฐํด ์ฃผ๋ฉด ๋จ
TextField๋ ๊ธฐ๋ณธ์ ์ผ๋ก String ํ์
์ Binding ํ ์ ์์ TextField("๊ฐ์ ์
๋ ฅํ์ธ์", text: ) String์ด ์๋ ํ์
์ Bindingํ๋ ๊ฒฝ์ฐ ์๋ฌ ๋ฐ์ํจ. ์ด๋ format์ ์ฌ์ฉํ๋ฉด ํ๋กํผํฐ์ ํ์
์ ๋ฐ๊ฟ์ฃผ์ง ์๊ณ ๋ ํ
์คํธ ํ๋์ ๊ฐ์ ํ์ํ ์ ์์ ใด checkAmount ๊ฐ์ด double์ด๊ธฐ ๋๋ฌธ์ TextField์ text ์ธ์์ Binding์ผ๋ก ์ ๋ฌํ๋ ๊ฒฝ์ฐ ์๋ฌ ๋ฐ์ํจ์ ํ์ธํ ์ ์์ TextField( "Proper name", value: $nameComponents, format: .name(style: .medium) ) ์ฌ์ฉ์์ ์
๋ ฅ์ผ๋ก ๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ์ ์ ์ฅํ ํ๋กํผํฐ๋ฅผ value๋ก ์ ๋ฌํ๊ณ format ํ์์ format ์ธ์๋ก ์ ๋ฌ..
ForEach array, ranges์ ํจ๊ป ๋ฐ๋ณต ์์
์ ํตํด ์ฌ๋ฌ ๋ทฐ๋ฅผ ์์ฑํ ์ ์์ ํด๋ก์ ธ๋ฅผ ํตํด ์คํ๋๋ฉฐ loop์ ๋ชจ๋ ์์ดํ
์ ํ๋ฒ์ฉ ์ํํ๊ฒ ๋จ class test { init() { let titles = ["a", "b", "c", "d", "e"] self.loopAllItems(items: titles) } func loopAllItems(items: [String]) { items.forEach { print($0) } } } ForEach๋ ๊ธฐ์กด์ Swift์์ ์ฌ์ฉํ ๊ณ ์ฐจ ํจ์ forEach์ ๋์๊ณผ ์ฌ์ฉ๋ฒ์ด ๊ฐ์ ScrollView { ForEach(0 ..< 100) { Text("\($0)") } } ForEach๋ฅผ ์ฌ์ฉํด์ ๋ฐ๋ณต๋๋ ๋ทฐ๋ฅผ ๊ฐ๋จํ ์ฝ๋๋ก ํ๋ฉด์ ๊ทธ๋ ค ์ค ์..
๋ฌ๋ฌ์ฌ์ธ์ two-way binding์ ํ ๋ ์ฌ์ฉ๋จ Text("๋น์ ์ ๋์ด๋ : \(age)") Text์ ๊ฒฝ์ฐ ํ๋กํผํฐ์ ์ํ๋ฅผ ๊ทธ๋๋ก ๋ณด์ฌ์ค TextField์ ๊ฒฝ์ฐ text๋ผ๋ ์ธ์์ ํ์ํ ๊ฐ์ด Binding two-way binding์ ํ๋กํผํฐ์ ์ํ ๊ฐ์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ฉด์ ํด๋น ์ํ๊ฐ์ ์
๋ฐ์ดํธ ํ๊ณ , ๊ทธ ์
๋ฐ์ดํธ ํ ๊ฐ์ ๋ค์ ํ๋ฉด์ ๋ณด์ฌ์ค ์ ์์ struct ContentView: View { @State private var age = "" var body: some View { VStack { TextField("๋์ด๋ฅผ ์
๋ ฅํ์์ค.", text: $age) Text("๋น์ ์ ๋์ด๋ : \(age)") }.padding() } } two-way binding์ ํ๋กํผํฐ ๋ฐ๋ก ์์ ..
์์ ์ฝ๋ struct ContentView: View { @State private var count = 0 @State private var isOne = false var body: some View { VStack { Button("๋ฒํผ ๋๋ฆฐ ํ์ \(count)") { self.count += 1 } Toggle(isOn: $isOne) { Text("ํ ๊ธ ์ํ \(isOne ? "on" : "off")") } } } } SwiftUI์์ View ๋จ์์ ๊ฐ๋จํ ๊ฐ์ State๋ฅผ ์ฌ์ฉํด์ ๊ด๋ฆฌํ๋๋ฐ ์ด๋ Button์ State์ ์ ๊ทผํ๊ธฐ ์ํด self๋ฅผ ์ฌ์ฉํ๊ณ Toggle์ ๋ฌ๋ฌ ์ฌ์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ ์์ ์๋ค. ์ฌ์ค ๊ฐ๊ฐ ํ๋กํผํฐ์ ์ ๊ทผํ ๋ ์ญํ ๊ณผ ์์น๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. State์ ๊ฐ..
Intro ํ์ฌ ๋ทฐ์์ ๋ณด์ฌ์ง๋ ๋ฐ์ดํฐ๋ค์ State๋ก ๊ด๋ฆฌํ ์ ์์. ์ด ์ํ์ ์ํด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก views are a function of their state ๋ผ๊ณ ํ๊ธฐ๋ ํจ (์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์
๋ ฅํ๊ธฐ ์ ๊น์ง ๋ฒํผ์ ๋นํ์ฑํ ์ํค๋ ๊ฒ๋ state๋ค์ ์ํด ๋ทฐ๊ฐ ๊ด๋ฆฌ๋๋ ๊ฒ) SwiftUI๋ struct๋ก ๊ตฌํ๋ view๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ Swift์ UIKit์ ์ฌ์ฉํ๋ ๊ฒ ์ฒ๋ผ ๋จ์ํ property๋ฅผ ์ ์ธํ ๋ค ๊ตฌ์กฐ์ฒด ์์์ ๊ทธ ๊ฐ์ ๋ฐ๊ฟ์ ์์ ํ๋กํผํฐ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ State๋ผ๋ ํค์๋๋ฅผ ๊ฐ์ง property wrapper๋ฅผ ์ฌ์ฉํ ์ ์์ SwiftUI๋ ๋ทฐ๋ฅผ ์ ๊ฑฐํ๊ณ ๋ค์ ๊ทธ๋ฆฌ๋ ์ผ์ ์์ฃผ ๋ฐ๋ณตํ๊ธฐ ๋๋ฌธ์ ๋ทฐ ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๊ฐ์ ๋ํด ๋จ์ํ๊ฒ..
'iOS ๐' ์นดํ
๊ณ ๋ฆฌ์ ๊ธ ๋ชฉ๋ก (6 Page)
๋จ์ถํค
๋ด ๋ธ๋ก๊ทธ
๋ด ๋ธ๋ก๊ทธ - ๊ด๋ฆฌ์ ํ ์ ํ |
Q
Q
|
์ ๊ธ ์ฐ๊ธฐ |
W
W
|
๋ธ๋ก๊ทธ ๊ฒ์๊ธ
๊ธ ์์ (๊ถํ ์๋ ๊ฒฝ์ฐ) |
E
E
|
๋๊ธ ์์ญ์ผ๋ก ์ด๋ |
C
C
|
๋ชจ๋ ์์ญ
์ด ํ์ด์ง์ URL ๋ณต์ฌ |
S
S
|
๋งจ ์๋ก ์ด๋ |
T
T
|
ํฐ์คํ ๋ฆฌ ํ ์ด๋ |
H
H
|
๋จ์ถํค ์๋ด |
Shift + /
โง + /
|
* ๋จ์ถํค๋ ํ๊ธ/์๋ฌธ ๋์๋ฌธ์๋ก ์ด์ฉ ๊ฐ๋ฅํ๋ฉฐ, ํฐ์คํ ๋ฆฌ ๊ธฐ๋ณธ ๋๋ฉ์ธ์์๋ง ๋์ํฉ๋๋ค.