SwiftUI - kirseia/study GitHub Wiki

ํ•ด๊ฒฐ๋ชปํ•œ ์ 

  • drag gesture + geometry reader ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ธฐ
  • ๋ฒ„ํŠผ ์˜์—ญ ํ™•์žฅ ์‹œํ‚ค๊ธฐ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜
  • optional value ์ฒ˜๋ฆฌํ•˜๊ธฐ - https://ericasadun.com/2019/06/20/swiftui-handling-optionals/
    • a.map { $0 } ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ์ ค ํŽธํ–ˆ์Œ;

์ •๋ฆฌ

  • Code๋กœ ์‰ฝ๊ฒŒ Custom View๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Œ.
  • preview๋„ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์Œ
  • import SwiftUI ๋ฅผ ํ•˜๊ณ , View๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ๋งŒ๋“ค๋ฉด ๋จ
  • PreviewProvider๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ๋งŒ๋“  ๋ทฐ๋ฅผ ํ”„๋ฆฌ๋ทฐ ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋‚ด์šฉ์„ dyanmic ํ•˜๊ฒŒ ๋กœ๋“œํ•ด์„œ ํ…Œ์ŠคํŠธ๋„ ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋””๋ฐ”์ด์Šค๋ฅผ ์ข…๋ฅ˜๋ณ„๋กœ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด์„œ ํ”„๋ฆฌ๋ทฐ๋„ ํ•  ์ˆ˜ ์žˆ์Œ (iphone 8, iphone xs ๋“ฑ ๋‹ค๋ฅธ ํƒ€์ž… 2๊ฐ€์ง€๋ฅผ ๋™์‹œ์— ๋กœ๋“œ ๊ฐ€๋Šฅ)
  • ๊ฒ๋‚˜ ๋น ๋ฅด๋‹ค๊ณ  ํ•จ.
  • Autolayout ์€ SwiftUI์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ, flexible box layout system์„ ์‚ฌ์šฉํ•จ
  • ์•„์ง์€ UITableView ๊ฐ™์€๊ฑด SwiftUI๋กœ ์™„์ „ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†์Œ
  • ์ƒ‰์ด ์•ฝ๊ฐ„ ๋‹ค๋ฆ„. dark mode / light mode์— ์ ํ•ฉํ•˜๊ฒŒ ์•Œ์•„์„œ ์ปจํŠธ๋กค ๋จ
  • UIKit / SwiftUI ์„ž์–ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ

๊ฐ„๋‹จ ๊ณต๋ถ€ํ•˜๊ณ  ๋‚œ ๋’ค ์ •๋ฆฌ

  • SwiftUI ๋Š” ๊ธฐ์กด Xib / Storyboard / UIKit์˜ View๋งŒ ๋Œ€์ฒดํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์•ž์—๊ฑฐ ํฌํ•จํ•ด์„œ ViewController๊นŒ์ง€ ๋Œ€์ฒด๋˜๋Š” ๊ฒƒ ๊ฐ™์€ ๋А๋‚Œ
    • ์‹ค์ œ ๋‚ด๋ถ€์—์„œ๋Š” controller ์˜์—ญ์€ UIViewControllerRepresentable ๊ฐ™์€๊ฑธ๋กœ ๋Œ€์ฒด๋˜๊ธด ํ•จ
    • ๊ทผ๋ฐ gesture ์ฒ˜๋ฆฌ๋‚˜ ๊ธฐ์กด ๋กœ์ง ์ฒ˜๋ฆฌํ•˜๋˜ ๋ถ€๋ถ„ ์ƒ๋‹น์ˆ˜๊ฐ€ binding ๋•Œ๋ฌธ์— SwiftUI ๋‚ด๋ถ€๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋จ.
    • SwiftUI ๋Š” control code + view ๊ฐ€ ํ•ฉ์ณ์ง€๊ณ , ์ž‘์€ ๋ถ€๋ถ„์œผ๋กœ ์ชผ๊ฐœ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ฝ”๋“œ๊ฐ€ ๋” ๋‹จ์ˆœํ•ด์ง€๋Š” ๋“ฏ

์ฐธ๊ณ  ์ž๋ฃŒ

  • SwiftUI WWDC ์„ธ์…˜ ๋ชจ์Œ
    • Introducing SwiftUI: Building Your First App

      • ๊ฐ„๋‹จํ•œ ์•ฑ ๋งŒ๋“ค๋ฉด์„œ binding ์ด ์™œ ์ข‹์€์ง€์— ๋Œ€ํ•ด (์„ ์–ธ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์™œ ์ข‹์€์ง€) ์„ค๋ช…
    • SwiftUI Essentials

      • ๊ฐ„๋‹จํ•œ ์•ฑ ๋งŒ๋“ค๋ฉด์„œ View ์ž‘์„ฑ๋ฒ•, binding, Environment ์‚ฌ์šฉ, TabbedView ์‚ฌ์šฉ ๋“ฑ
      • ์ถ”์ฒœ !
    • Integrating SwiftUI

      • UIViewControllerRepresentable / UIViewRepresentable ๋“ฑ ์„ค๋ช…, ๋ฐ์ดํ„ฐ binding ๊ด€๋ จ ์„ค๋ช…
      • @ObjectBinding, @EnvironmentObject, @State ์™ธ์—... @Environment, @Binding ์ด ์žˆ์Œ.
    • Building Custom Views with SwiftUI

      • ๋ ˆ์ด์•„์›ƒ ํ”„๋กœ์‹œ์ ธ - ๋ทฐ๊ฐ€ ๊ทธ๋ ค์ง€๋Š” ์ˆœ์„œ๋ฅผ step by step ์œผ๋กœ ์•Œ๋ ค์คŒ
      • Parent ๊ฐ€ size ๋ฅผ child ์— ์ถ”์ฒœ -> child ๊ฐ€ ์Šค์Šค๋กœ ์‚ฌ์ด์ฆˆ๋ฅผ ์ •ํ•œ๋‹ค -> parent ๋Š” child ๋ฅผ ์ ๋‹นํ•œ ์œ„์น˜์— ์œ„์น˜์‹œํ‚จ๋‹ค
      • ๋ณต์žกํ•œ(?) arc ์ด๋ฏธ์ง€๋ฅผ ๊ทธ๋ฆฌ๋ฉด์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์•Œ๋ ค์คŒ
    • SwiftUI On All Devices

      • ๊ธฐ์กด์—๋Š” MacOS:AppKit, iPad+iOS: UIKit, AppleTV: (TVUIKit or UIKit), AppleWatch: WatchKit ์ด์—ˆ์ง€๋งŒ ์ด์ œ SwiftUI ํ•˜๋‚˜๋กœ ๊ฐ„๋‹ค
      • ํ•˜๋‚˜์˜ ์‚ฌ์ด์ฆˆ๋กœ ๋ชจ๋“  ํ”Œ๋žซํผ์— ๋งž๋Š” ์•ฑ์€ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ, ๋Œ€์‹  ๊ฐ™์€ ๊ธฐ์ˆ , ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์ž.
      • Write once, run anywhere, Learn once, apply anywhere <- SwiftUI ์ฒ ํ•™์ธ ๋“ฏ
      • ํ•˜๋‚˜์˜ ์•ฑ์„ ๋งŒ๋“ค์ง€ ๋ง๊ณ , ์—ฌ๋Ÿฌ๊ฐœ์˜ ์•ฑ์„ ๋งŒ๋“ ๋‹ค.
      • appleTV, macOS, iOS, appleWatch ๊ฐœ๋ฐœ ๋ทฐ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์•Œ๋ ค์คŒ
      • Apple TV ์—๋Š” 10๊ฑธ์Œ ๊ฒฝํ—˜์„ ์ค‘์‹œ, ๋ทฐ๋ฅผ ํฌ์ปค์Šค ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•จ
      • iOS๋Š” TabbedView ์•„๋ž˜์— NavigationView๊ฐ€ ์žˆ๋Š”๋ฐ, tvOS๋Š” NavigationView์•„๋ž˜์— TabbedView๊ฐ€ ์žˆ์Œ.
    • SwiftUI on watchOS

    • Data Flow Through SwiftUI

      • ์ถ”์ฒœ! ๊ผญ ์ฝ์–ด๋ณด์ž.
      • ํ•ต์‹ฌ์€ ์ •๋ณด์˜ ๋ถ„์‚ฐ (๋ณต์‚ฌ๋˜์–ด์„œ...)์€ ์•ฑ์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค. binding ์œผ๋กœ ๋ณต์‚ฌ๋˜์ง€ ์•Š๊ฒŒ ํ•˜์ž.
      • @State - binding ๊ฐ€๋Šฅํ•œ ๊ฐ’
      • @Binding - Read and write without ownership / derived from @State (ํ•˜์œ„ ๋ทฐ์— ๊ฐ’ ์ „๋‹ฌ/์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š”)
      • BindableObjectProtocol - class ๋‚˜ struct ๋ฅผ binding ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
      • @ObjectBinding - BindableObjectProtocol ์„ binding ํ•˜๋Š” ๊ฒƒ
      • @EnviromentObject - static ํ•œ ๊ฐ’. ์–ด๋””์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • Accessibility in SwiftUI

      • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ ‘๊ทผ์„ฑ - Label ์„ ์ดํ•ดํ•˜๊ธฐ, Action ํ•˜๊ธฐ, ์ˆœ์„œ์™€ ๊ทธ๋ฃนํ•‘ ํ•˜๊ธฐ. ๋ฅผ ์ž˜ ํ•ด์•ผ ํ•จ
      • ์ ‘๊ทผ์„ฑ - ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” ์‹œ๊ฐ ์žฅ์• ์ธ๋„ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋ณด์ด์Šค ์˜ค๋ฒ„ ํ•ด์ฃผ๋Š” ๊ฒƒ๋“ค ๊ฐ™์€ ๊ฒƒ.