SwiftUI Tutorial: 1.1. Creating and Combining Views

zam·2023년 4월 11일
0

SwiftUI Tutorial

목록 보기
1/3
post-thumbnail

튜토리얼을 진행하며 생긴 궁금증과 알게된 팁들 (feat. chatGPT)

SwiftUI Tutorial: 1.1. Creating and Combining Views
https://developer.apple.com/tutorials/swiftui/creating-and-combining-views


커맨트+클릭 자동 감싸기


'+'에서 드래그드랍으로 작성 가능

Text 같은 것들


offset 조정은 어떤 원리일까?

임의로 offset 조정해도 원래 틀은 유지됨.


padding을 -130 준다는게 어떤 원리지?

패딩 하단 부분을 없애서 이미지가 차지하는 틀(영역)을 줄였음


SwiftUI에서 쓰는 폰트 시스템은 어떤 것들이 있을까?

SwiftUI Documentation - Font
HIG - Typography


OS마다 알아서 Variable 되는 것 같음.


어떻게 Hstack에 쓰는 Modifier로 한 번에 적용이 가능할까?

원래 이렇게 각각 폰트 크기 줬던거를
아래와 같이 한번에 줄 수 있음.

Q: HStack은 뭘 반환하는 길래 이게 가능한거지?
A: View를 반환
Q: View에 저 속성들을 입힐 수 있어서 가능한건가? 쟤네들은 알아서 폰트에만 적용되는 애들인거고?
A: 맞음


Hstack은 View를 반환함. 그래서 View에 적용할 수 있는 property인 .font나 .foregroundcolor를 쓰는 것. View modifier라고 부름. 자식 뷰에게도 적용이 가능함.
( HStack returns a View, and it is possible to apply view modifiers to it and its child views.)


MapView()에는 왜 {}를 안쓸까?

Q: 같은 파일에 있는 뷰는 그냥 이렇게 불러오면 되는건가? 여기서 함수호출한건가. 여기서는 왜 괄호 안넣어도 되는걸까. 뷰 자체에 대한 설정 조절.. View를 반환해서 표시하는거니까 View에서 건드릴 수 있는 modifier 건드는 것? (맞음)

  • {} 괄호는 function이나 closure을 define 하는데 씀
  • MapView는 View이기에 View protocol을 준수하는 Struct이기 때문임. 그래서 {} 필요없음.

그럼 클로저랑 프로토콜이 무엇이냐?

Closure 클로저
In Swift, a closure is a self-contained block of code that can be passed around and executed at a later time. It is similar to a function, but with a few key differences. A closure can capture and store references to any constants or variables from the context in which it is defined, making it a powerful tool for encapsulating behavior and state. Closures are often used in Swift for asynchronous programming, functional programming, and event handling.

Protocol 프로토콜
In Swift, a protocol is a set of rules or requirements that a type must conform to. Protocols define a blueprint of methods, properties, and other requirements that a conforming type must implement. A protocol can be thought of as a contract between two types, specifying how they can interact with each other. Protocols are a powerful tool in Swift for creating reusable and composable code, as they allow different types to conform to the same interface and be used interchangeably. Protocols are commonly used in Swift for delegation, dependency injection, and API design.

다음에 다시 알아보기..


퀴즈 1. When creating a custom SwiftUI view, where do you declare the view’s layout?

정답: 커스텀 뷰 생성할 때 뷰의 레이아웃을 body 프로퍼티에 선언함.

뷰의 레이아웃이라는게 무슨 뜻일까? (View’s layout)

  • 뷰의 레이아웃이란 화면에서 보기가 어떻게 구성되고 배열되는지를 나타내는 것이다.
  • 예를 들면, its size and shape, the spacing between different elements, and any other visual attributes that determine how the view looks and behaves.
  • 모양과 동작들을 결정하는 시각적 속성들

뷰의 레이아웃을 body property에 선언한다는 뜻은?

  • custom view를 생성할때는 View protocol의 body property를 implement해서 layout을 define하는 것임.
  • body property는 view hierarchy를 반환함.
  • view hierarchy 구조랑 appearance를 담고있는 거고.
  • 그래서 built-in views, modifiers, and containers를 마음대로 조합해서 커스텀 뷰를 구성할 수 있는 것.
  • Body는 뷰의 레이아웃과 동작을 선언하는 곳(위치)임.
  • Body 속성은 일부 View 유형의 값을 반환하는 계산된 속성입니다. 즉, View 프로토콜을 준수하는 모든 유형을 반환할 수 있습니다.

컨테이너란 무엇인가?

자식 뷰를 하나 이상 담는 것들. Vstack, Hstack, Zstack, List, Navigation View, TabView, Form 등.

By using containers, you can create complex view hierarchies that are organized and easy to understand. You can also use modifiers to apply layout and styling properties to individual views or to groups of views inside containers. This makes it easy to create sophisticated user interfaces with a minimal amount of code.

modifiers 생성자로 개별 뷰나 컨테이너가 담은 뷰들에게 property를 적용할 수 있는 것임. 생성자로 미니멀한 코드를 짤 수 있음.


질문 4번. Which is the correct way to use modifier methods to configure a view?

configure a view가 무슨뜻인가?

A: 뷰에 속성과 동작을 기능과 보기에 따라 세팅하는 걸 의미함.
ConfiIn SwiftUI, configuring a view means setting its properties and behaviors to customize its appearance and functionality.


그렇다면 생성자(.)의 역할은?


생성자는 뷰를 반환함. 생성자가 새로운 동작이나 시각적인 변화를 뷰에 적용하는 것임. A modifier returns a view that applies a new behavior or visual change. You can chain multiple modifiers to achieve the effects you need.

modifier는 뷰에서 속성을 변경하거나 동작을 추가하기 위해 호출하는 메서드입니다. 각 modifier는 지정한 변경 사항을 통합하는 수정된 새 보기를 반환합니다. 여러 modifier를 연결하여 서로 다른 스타일과 동작을 가진 복잡한 뷰를 작성할 수 있습니다.


Struct MyListView : View와 Var body: some View의 View들은 무슨 차이야?


: 은 type 정의할 때 씀.
body에 View로 타입을 정의한 것
그런데 struct는 Return type에 민감함.
그래서 some을 붙여서 view같은 애들인 불명확타입을 잘 받을 수 있게 함


불명확타입이란?

불명확 타입은 런타임 시에만 알 수 있는 타입으로, 컴파일 타임에는 알 수 없는 타입입니다. 이는 SwiftUI에서 View 또는 View를 반환하는 함수와 같은 제네릭 타입에서 흔히 발생합니다.
SwiftUI에서는 some 키워드를 사용하여 불명확 타입을 지정할 수 있습니다. 예를 들어, some View 타입은 "어떤 View 타입이던 상관 없지만, View 타입이어야 한다"는 것을 나타냅니다. 이러한 방식으로, some을 사용하여 프로그래머가 구체적인 타입 대신 불명확한 타입을 지정할 수 있습니다.
some 키워드는 SwiftUI의 ViewBuilder 및 AnyView와 같은 다양한 기능에서 사용됩니다. 예를 들어, ViewBuilder를 사용하면 함수의 반환 타입을 some View로 지정하여, 함수가 어떤 종류의 View를 반환하는지 신경 쓰지 않고도 다양한 View를 반환할 수 있습니다.
즉, some 키워드는 불명확한 타입을 처리하기 위해 SwiftUI에서 제공되는 유용한 기능 중 하나입니다.
불명확타입 관련 벨로그

0개의 댓글