관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 3. WWDC2024 정리 - (1) What's new in Xcode 16 (Xcode16 신기능, Code Completion, Isolated Global Variables, @Previewable, PreviewModifier) 본문

WWDC 정리/WWDC 2024 정리

[iOS - swift] 3. WWDC2024 정리 - (1) What's new in Xcode 16 (Xcode16 신기능, Code Completion, Isolated Global Variables, @Previewable, PreviewModifier)

jake-kim 2024. 6. 19. 01:08

Code Completion (자동완성)

  • Copilot과 유사하게 자동완성 기능을 제공

자동완성기능

빌드세팅 - Isolated Global Variables

  • 전역변수는 Concurrency에서 안전하지 않다는 warning 표출해주는 옵션

  • 위 옵션을 키고 빌드 시 warning 확인 가능

간편한 프리뷰 - @Previewable

  • 아래와 같은 RobotFaceSelectorView를 프리뷰 사용할 때 currentFace에 관한 바인딩이 필요한 상황

  • 기존에는 위 뷰를 preview하려면 wrapper view를 만들어서 currentFace를 바인딩시켜야함

ex) 기존 방법

struct Simple_Previews: PreviewProvider {
    struct ContainerView: View {
        @State private var currentFace = RobotFace()
        
        var body: some View {
            RobotFaceSelectorView(currentFace: $currentFace)
        }
    }

    static var previews: some View {
        ContainerView()
    }
}
  • Xcode 16부터는 @State 프로퍼티를 따로 선언한 후, 앞에 @Previewable를 붙여서 사용하면 위 wrapper view없이 바로 사용 가능

PreviewModifier

  • preview를 위한 환경이나 데이터를 더 쉽게 공유 가능
    • 중복코드 제거 가능
    • 미리보기 시스템에서 데이터 캐시 가능

ex) RobotNamer라는 구조체에 PreviewModifier를 준수

  • makeSharedContext(), body(content:context:) 메서드 구현이 필요

  • makeSharedContext() 메서드 반환값에는 preview를 하기위해서 필요한 데이터(context)를 리턴해주는것
    • 위 예제에서는 RobotNameSelectorView에 가지고 있는 데이터인 RobotNamer에 해당
    • 주의사항) 이 메서드는 캐싱되기 때문에 단 한번만 호출됨

  • 위처럼 작성하면 preview 작성이 완성된 것
  • 또 이렇게 작성된 previewModifier를 쉽게 사용하기 위해서 PreviewTrait을 extension하여 제공하도록 구현

  • 이제 사용하는 쪽에서도 단순히 #Preview(traits:)으로 편리하게 사용가능

 

* 참고

- https://developer.apple.com/videos/play/wwdc2024/10135/

Comments