swift 복습

Swift UI란?

섭섭's 2024. 7. 16. 03:29

Swift UI 의 특징

1.Swift UI는 *상태 중심 프레임 워크 입니다.

*상태: 애플리케이션의 현재 상황을 나타내는 데이터 구조를 의미

2.Xcode 12 와 ios 13 이상부터 지원합니다.

 

Swift UI 의 장점

*선언적 구문

간결한 코드로 가독성 향상

손쉬운 View조합을 통한 규현

Preview 의 강력한 기능

Modifier Chaining을 통한 편리한 구현

--

*선언적 구문은 어떻게 무엇을 할 것인지 선언하고 시스템이 자동으로 선언합니다.

그렇기 때문에 코드가 간결해지고 유지보수가 용이해 집니다.

 

Swift UI의 단점

UIKit를 전부 대체하지는 못합니다.

낮은 버전에서 사용할 시 버그가 많습니다.

매 버전 업데이트 할 때마다 변경점이 많습니다.

 

SwiftUI의 View Layout 결정원리

 

SwiftUI가 뷰의 크기를 결정하고 화면에 배치하는 원리

struct ContentView: View{
	
    var body:some View {
    Text("Hello world!")
    
    .padding(15)
    .background(Color.blue)
  }
}

 

 

 

------


Root View는 Content View로 간주되며, 레이아웃 중립적입니다.

 

따라서 화면 전체 영역(세이프 에어리어 제외)을 하위 뷰에 제공하도록 설계합니다.

 

Content View 또한 레이아웃 중립적이므로, 하위 뷰에 대한 결정권을 그대로 전달합니다.

 

Background 역시 레이아웃 중립적이기 때문에, 하위 뷰인 Padding에게 관련 설정을 위임합니다.

 

소스코드를 보면 Padding의 경우 각 영역에 15포인트씩 적용하도록 되어있습니다.

 

화면 전체 영역에서 상하좌우 각각 15포인트씩 여백을 두어 레이아웃을 구성합니다.

 

이를 통해 화면 중심부에 집중할 수 있는 공간을 확보할 수 있습니다.

 

텍스트 뷰의 경우, 별도로 프레임 크기를 지정하지 않았다면 해당 텍스트 내용을 표현하는 데 필요한 최소한의 크기를 자동으로 가져옵니다.

 

또한 하위 뷰들의 위치를 별도로 지정하지 않으면, 레이아웃 내에서 자동으로 중앙에 배치됩니다.

 

 

Property

 

1. @State

2. @Binding

3. ObservableObject

4.@Published

5.@ObservedObject

6.@StateObject

7.@Environment

8.@EnvironmentObject

 

@State

1.SwiftUI에서 상태를 처리하는 방법 입니다.

2.뷰의 상태를 저장하는 프로퍼티 입니다.

3.Private 선언 이기 때문에 다른 뷰와 값을 소통하려면 Binding을 이용합니다.

4.값이 변경될 때 마다 UI를 업데이트 합니다.

 

@Binding

1.뷰와 상태를 바인딩하는 방법 입니다.

2.상위 @state 변수를 전달 받아 하위 뷰에서 캐치해 변화를 감지하고 연결합니다.

3.Binding은 다른 뷰가 소유한 속성을 연결하기 때문에 소유권 및 저장공간이 없습니다.

 

ObservableObject

1.클래스 프로토콜로 관찰하는 어떠한 값이 변경되면 변경사항을 알려줍니다.

2.뷰에서 인스턴스 변화를 감시하기 위해 뷰모델 객체로 생성할 때 사용할 수 있습니다.

 

@Published

1.observableObject를 구현한 클래스 내에서 프로퍼티 선언 시 사용

2.@Published로 선언된 프로퍼티를 뷰에서 관찰할 수 있음

3.ObservableObject의 objectWillChange.send()기능을 @published 프로퍼티가 변경되면 자동으로 호출합니다.

 

@ObservedObject

1.뷰에서 ObservavleObject 타입의 인스턴트 선언 시 사용

2.ObservableObject의 값이 업데이트되면 뷰를 업데이트

 

@StateObject

1.뷰에서 ObservableObject 타입의 인스턴스 선언 시 사용

2. 뷰마다 하나의 인스턴스를 생성하며, 뷰가 사라지기 전까지 같은 인스턴스 유지

3.매번 인스턴스가 새롭게 생성되는 것처럼 외부에서 주입 받는 경우가 아닌 최초 생성 선언 시에 @StateObject를 사용하는 것이 적절한 방법

 

@Environment

1.미리 정의되어 있는 시스템 공유 데이터

2.사용하려는 공유 데이터의 이름을 keyPath로 전달하여 사용

3. 시스템 굥유 데이터는 가변하기에 var로 선언 필요

 

@EnvironmentObject

1.ObservableObject를 통해 구현된 타입의 인스턴스를 전역적으로 공유하여 사용

2.앱 전역에서 공통으로 사용할 데이터를 주입 및 사용

 

 

 

 

 

'swift 복습' 카테고리의 다른 글

TabView  (0) 2024.08.04
ScrollView  (0) 2024.08.04
List , form  (0) 2024.08.04
Stack  (0) 2024.08.04
Swift UI 기초적인 이미지 설정하기  (0) 2024.07.18