SwiftUI - kirseia/study GitHub Wiki

해결못한 점

정리

  • 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 하기, 순서와 그룹핑 하기. 를 잘 해야 함
      • 접근성 - 간단하게는 시각 장애인도 쓸 수 있게 보이스 오버 해주는 것들 같은 것.