DEV_Larva

HACKING WITH SWIFT - WeSplit ๋ณธ๋ฌธ

SwiftUI & UIKit/Tutorials

HACKING WITH SWIFT - WeSplit

NelchuPapa 2022. 8. 17. 01:10
๋ฐ˜์‘ํ˜•

๐Ÿง‘‍๐Ÿ’ป์ด๋ฒˆ ์‹œ๊ฐ„๋ถ€ํ„ฐ๋Š” ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋ฉด์„œ  ์•ž์„œ ๋ฐฐ์šด Swift์˜ ๊ธฐ๋ณธ์„ ์ด์šฉํ•˜์—ฌ ์‹ค์ œ ์ฝ”๋“œ์— ๊ธฐ์ˆ ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค!

 

 

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์ธ์›์ˆ˜์™€ ๋‚จ๊ธฐ๊ณ  ์‹ถ์€ ํŒ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก์„ ๋ถ„ํ• ํ•˜๋Š” ์•ฑ์œผ๋กœ์„œ ์šฐ๋ฆฌ๋‚˜๋ผ์—์„œ๋Š” ํŒ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ๋งํ•ด "๋ฟœ๋น ์ด", "๋”์น˜ํŽ˜์ด๐Ÿ’ธ" ์•ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ์ด๋‹ค. 

 

 


 

1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ 

 

SwiftUI๋กœ ์ƒˆ ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ผ๋‹จ ๋‹น์—ฐํžˆ Xcode๊ฐ€ ์ด์šฉ๋˜๋Š”๋ฐ ์ด์ „์˜ ๊ฒฝ์šฐ Playground๋ฅผ ํ†ตํ•ด ์‹ค์Šตํ•ด๋ณด์•˜์ง€๋งŒ, ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ๋ฐ”๋กœ SwiftUI๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์•ฑ์„ ๊ตฌํ˜„ํ•ด๋ณด์ž.

 

๋จผ์ € ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ์•ฑ์˜ ์ด๋ฆ„๊ณผ ๊ฐœ๋ฐœ ์–ธ์–ด ๋ฐ ์ €์žฅ ์œ„์น˜ ๋“ฑ๋“ฑ ์„ค์ •ํ•˜๊ณ  ๋‚˜๋ฉด

๋ฐ”๋กœ ์ด๋ ‡๊ฒŒ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ด ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์•„๋งˆ ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ๊ฐœ๋ฐœํ•ด๋ดค๊ฑฐ๋‚˜ ํ–ˆ๋‹ค๋ฉด ์ด๋Ÿฐ ๊ณผ์ •์€ ๊ธˆ๋ฐฉ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋จผ์ € ์™ผ์ชฝ์„ ๋ณด๋ฉด Project Navigator๋กœ ๋ถˆ๋ฆฌ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์บ”๋ฒ„์Šค ๋ถ€๋ถ„์—์„œ๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. 

  • WeSplitApp.swift์—๋Š” ์•ฑ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ๊ฒƒ์„ ๊ณ„์† ์œ ์ง€ํ•˜๋ ค๊ณ  ํ•˜๋ฉด, ํ•ด๋‹น ๋ถ€๋ถ„์„ ์—ฌ๊ธฐ์„œ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋œ๋‹ค.
  • ContentView.swift์—๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ดˆ๊ธฐ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด ํ”„๋กœ์ ํŠธ์—์„œ ๊ฑฐ์˜ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค.
  • Assets.xcassets๋Š” ์•ฑ์—์„œ ์‚ฌ์šฉํ•  Assets ์นดํƒˆ๋กœ๊ทธ์ด๋‹ค. ๋˜ํ•œ ์•ฑ ์•„์ด์ฝ˜, ์•„์ด๋ฉ”์‹œ์ง€ ์Šคํ‹ฐ์ปค ๋“ฑ๊ณผ ํ•จ๊ป˜ ์ƒ‰์ƒ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Preview Content๋Š” ๋‚ด๋ถ€์— Preview Assets.xcassets๊ฐ€ ํฌํ•จ๋œ ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค. ์ด ๊ทธ๋ฃน์€ ๋‹ค๋ฅธ Assets ์นดํƒˆ๋กœ๊ทธ๋กœ, ํŠนํžˆ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ๋˜๋Š”์ง€ ์•Œ๋ ค ์ค€๋‹ค.

 


 

 

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํŠนํžˆ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ContentView์—์„œ ๋ชจ๋“  ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธํŒ…๋˜์–ด์žˆ๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด์ž.

 

 

  1. import SwiftUI๊ฐ€ ๋ณด์ธ๋‹ค. ์ด๊ฑด Swift์˜ SwiftUI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. Apple์€ ๊ธฐ๊ณ„ ํ•™์Šต, ์˜ค๋””์˜ค ์žฌ์ƒ, ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋“ฑ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์œ„ํ•œ ๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ๋„์„œ๊ด€์—์„œ ์ด๋ฏธ ์ž‘๊ฐ€๊ฐ€ ์“ด ์ฑ…์„ ๋นŒ๋ ค์„œ ์ฝ๋Š” ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋”์šฑ ์‰ฝ๊ฒŒ ์ดํ•ด๋  ๊ฒƒ ๊ฐ™๋‹ค. 
  2. struct ContentView: View๋ผ๋Š” ๊ตฌ์กฐ์ฒด๊ฐ€ ํ•˜๋‚˜ ๋ณด์ธ๋‹ค. View๋Š”  View ํ”„๋กœํ† ์ฝœ๋กœ ๊ตฌ์„ฑ๋œ ContentView๋ผ ๋ถˆ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ๊ตฌ์กฐ์ฒด ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ ๋‹ค. ์—ฌ๊ธฐ์„œ View๋Š” SwiftUI์˜ ๊ธฐ๋ณธ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. 
  3. var body: some View๋Š” body๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ณ„์‚ฐ ์†์„ฑ์„ ์ •์˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  some View๋Š” ์šฐ๋ฆฌ์˜ ๋ ˆ์ด์•„์›ƒ์ธ View ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 
  4. Text("Hello, world!")๋Š” "Hello, world!" ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ๋ณด๊ธฐ๋ฅผ ๋งŒ๋“ ๋‹ค. Text View๋Š” ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š” ์ •์  ํ…์ŠคํŠธ์˜ ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ํ•„์š”์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ์ž๋™์œผ๋กœ ์ค„์„ ๋ฐ”๊พผ๋‹ค.
  5. ContentView ๊ตฌ์กฐ์ฒด ์•„๋ž˜์—๋Š” PreviewProvider ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋Š” ContentView_Previews ๊ตฌ์กฐ๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์‹ค์ œ๋กœ ์•ฑ ์Šคํ† ์–ด์— ์—ฐ๊ฒฐ๋˜๋Š” ์ตœ์ข… ์•ฑ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ UI ๋””์ž์ธ์˜ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋„๋ก Xcode๊ฐ€ ์‚ฌ์šฉํ•˜๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋˜์—ˆ๋‹ค.

 


2. ์–‘์‹ ๋งŒ๋“ค๊ธฐ 

 

๋งŽ์€ ์•ฑ๋“ค์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ์„ ์š”๊ตฌํ•˜๊ฑฐ๋‚˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ ์ค€๋‹ค.  ํ•˜์ง€๋งŒ ํ…์ŠคํŠธ ํ•„๋“œ, ๋ฒ„ํŠผ, ๋“ฑ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ๋Œ€ํ™”ํ˜• ์ปจํŠธ๋กค์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๋”์šฑ ํšจ๊ณผ์ ์ด๊ณ  ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค. 

 

 

- Form

 

var body: some View {
    Form {
        Text("Hello, world!")
            .padding() //Form์„ ์“ฐ๋ฉด ํŒจ๋”ฉ๋„ ์ œ๊ฑฐ ํ• ์ˆ˜์žˆ๋‹ค.
    }
}

 Form์€ ๊ธฐ๋ณธ ํ…์ŠคํŠธ ๋ณด๊ธฐ๋ฅผ ๋‚ด๋ถ€์— ๋ž˜ํ•‘ํ•จ์œผ๋กœ์จ ๊ธฐ๋ณธ ์–‘์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. 

๋ฐ”๋กœ ์บ”๋ฒ„์Šค์—์„œ ํ•ด๋‹น ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋˜ํ•œ ์‚ดํŽด๋ณด์ž!

์œ„์—์„œ ์ตœ์ดˆ์˜ Hello World์™€ ๋น„๊ตํ•ด๋ณด๋ฉด ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

๊ธฐ์กด์—๋Š” ํฐ์ƒ‰ ๋ฐ”ํƒ•์˜ ์ค‘์•™์— 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