반응형

 

Hacking with Swift 사이트의 강좌 번역본입니다.

 

[원문 : https://www.hackingwithswift.com/quick-start/swiftui/whats-in-the-basic-template]

 

What’s in the basic template?

[동영상 강좌 : https://youtu.be/TpdMJBSBvEg]

: 이번 장을 완전히 건너뛸수 있다고 생각할지도 모르지만, Swift 천재가 아니라면, 끝까지 확실히 읽어야 합니다. 

 

기본 Single View App 템플릿은 다음을 제공합니다:

  1. AppDelegate.swift. 이것은 다른 앱이 파일을 열기 위해 보내려고 하는 것 같은 외부 이벤트를 모니터링 책입집니다.
  2. SceneDelegate.swift. 이것은 여러 인스턴스들을 동시에 실행하거나 배경으로 이동할 수 있는 동작을 수행하는것 처럼, 앱이 보여지는 방법을 책임집니다. 
  3. ContentView.swift. 사용자 인터페이스의 초기 부분입니다. UIKit 프로젝트인 경우에, Xcode가 제공한 ViewController 입니다.
  4. Assets.xcassets. 이것은 프로젝트에서 사용된 모든 이미지와 색상들을 저장하는 자산 목록(asset catalog)입니다.
  5. LaunchScreen.storyboard. 이것은 앱이 로딩되는 동안 보여지는 화면 입니다.
  6. Info.plist는 프로퍼티 목록 파일이며, 해당 인스턴스는 시스템에서 앱 전반적인 설정을 저장하는데 사용됩니다 - 예를들어, iOS 홈 화면에 아이콘 아래에 어떤 이름을 보여줄지 입니다.
  7. Preview Content라는 그룹은 Preview Assets라는 또 다른 자산 목록을 포함합니다. 

그게 다 입니다 - 이를 기반으로 만들수 있는것을 의미하는, 기분 좋을 만큼의 적은 코드와 리소스입니다.

 

정말 신경 쓰는 부분은(사실상, 유일하게 중요한 부분입니다) ContentView.swift입니다. 앱의 주요 기능이고, 잠깐동안 다양한 SwiftUI 코드를 시도해볼수 있는 곳입니다.

 

첫번째, ContentView.swift가 화면에 보여주게 만드는 것은 무엇인가요?

 

음, 내가 말했던것을 기억한다면, SceneDelegate.swift가 앱이 보여지는 방법을 관리하는 책임이 있다고 말했었습니다. 계속해서 지금 SceneDelegate.swift를 열고, 다음과 같은 코드를 보게 될 것입니다.

if let windowScene = scene as? UIWindowScene {
    let window = UIWindow(windowScene: windowScene)
    window.rootViewController = UIHostingController(rootView: ContentView())
    self.window = window
    window.makeKeyAndVisible()
}

 

그 코드는 새로운 ContentView인스턴스(곧 살펴볼 주요기능입니다)를 만들고, 윈도우 안쪽에 배치함으로써 화면에 보여집니다. ContentView의 첫번째 인스턴스를 보여줌으로써 앱을 효과적으로 부팅하고, 거기에서부터 우리에게 넘어옵니다 - 무엇을 하고 싶으신가요?

 

ContentView.swift을 열고 실제 SwiftUI 코드를 살펴봅시다. 다음과 같은 코드를 보게 됩니다.

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello World")
    }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

 

코드는 많지 않지만, 많은 것이 들어 있습니다.

 

첫번째, ContentView는 구조체인것을 주목하세요. UIKit에 익숙한 개발자들은 이것이 엄청난 것이라는 것을 알고 있을 것입니다 - 사용자 인터페이스에 대한 값 타입의 모든 불변성과 단순함을 이점을 얻습니다! UIKit에 익숙하지 않는 사람들은… 글쎄요, 그냥 웃지요 - 우리가 겪었던 고통을 전혀 모릅니다. 

 

두번째, ContentView View 프로토콜을 준수합니다. SwiftUI에서 보여주고자 하는 모든 것은 View를 준수해야 하고, 실제로는 한가지만을 의미합니다: View의 종류를 반환하는 body 프로퍼티가 있어야 합니다.

 

세번째, body의 반환 타입은 some View입니다. some 키워드는 Swift 5.1에서 소개되었고 opaque return types(불투명 반환 타입)이라는 기능의 일부이고, 이 경우에 문자 그대로인 View의 종류를 반환할 것이지만 SwiftUI는 무엇인지 알 필요는 없습니다.를 의미합니다.

 

중요: some View를 반환하는 것은 body프로퍼티가 View 프로토콜을 준수하는 무언가를 반환할 것이라는 의미입니다. 많은 것을 반환하거나 어떤것을 반환해야하는지를 모를수는 없습니다 - Swift 컴파일러는 코드를 빌드하는 것을 거부할 것입니다. 명확하게 하기 위해서, 뷰의 body는 항상 정확히 하나의 자식 뷰를 반환해야 합니다.

 

네번째, body 프로퍼티의 내부에 있는 Text(Hello World) Hello World 텍스트의 라벨을 만듭니다.

 

마지막으로, ContentView 아래는 비슷하지만 다른 구조체 contentView_Previews가 있습니다. 이것은 실제 앱화면과는 반대로 Xcode에서 뷰 미리보기를 보여주기 때문에, View프로토콜을 준수하지 않습니다. 이것이 #if DEBUG #endif줄 안에 있는 이유 입니다 - 이 코드는 실제 프로덕션 앱에서는 의미가 없기 때문에, 디버그 환경으로 실행될때만 내장됩니다. 

 

이러한 각 구성요소들을 곧 훨씬 더 자세히 살펴볼 것이지만, 우선은 Text구성요소를 살펴봅시다…

반응형
Posted by 까칠코더
,