DevCho
Developer Blog
DevCho
반응형
전체 방문자
오늘
어제
  • 분류 전체보기 (48)
    • IOS (31)
      • Xcode (7)
      • Assets (1)
      • Swift (20)
      • UI (1)
      • SwiftUI (1)
      • Build (1)
    • Flutter (4)
      • Install (4)
      • Dart (0)
    • Rust (0)
    • 유용한 사이트 소개 (1)
    • 개발자의 아이템 (1)
    • Terminal (1)
    • Mac (2)
    • Git (1)
    • 회고 (1)
    • Java (2)
      • Java 기본 사용법 (2)
      • Collections (0)
    • 개발자의 글쓰기 (0)
    • 디자인 패턴 (1)
    • JavaScript (2)
    • Kotlin (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • flutter dart
  • Xcode Theme
  • flutter install
  • 플러터 설치
  • chocolatey
  • optional
  • IOS
  • chocolatey install
  • dart 설치
  • 제어문
  • flutter 설치
  • chocolatey 설치
  • xcode13
  • Java
  • SwiftUI
  • CLASS
  • nil
  • struct
  • Swift
  • Dark mode
  • xcode
  • Storyboard
  • Terminal
  • swift random
  • MAC
  • flutter
  • dart
  • func
  • random number
  • 스위프트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DevCho

Developer Blog

[SwiftUI] SwiftUI에서 Custom View 만들기 : State와 body를 사용하는 방법
IOS/SwiftUI

[SwiftUI] SwiftUI에서 Custom View 만들기 : State와 body를 사용하는 방법

2021. 12. 31. 09:36
반응형

SwiftUI에서 Custom View 만들기

Custom View는 재활용 가능한  View의 단위이다. SwiftUI에서는 간편하게 Custom View를 만들 수 있는 방법을 제공한다. 아래에서 구성요소부터, 만들고 사용하는 방법까지 살펴보자.

 

 

Custom View의 구성요소

SwiftUI에서 재활용 가능한 CustomView를 만들기 위해서는 View 타입의 struct와 State와 Body 두가지가 필요하다. 

  • State : CustomView의 UI State를 저장하는 변수. 이 값이 바뀔 때 Custom View가 업데이트 된다. State가 선언되지 않은 변수는 변경이 불가능하다. 
  • Body : CustomView의 UI를 그려주는 부분. 타입은 항상 some View 여야 하며, 이 부분에 View들을 결합시켜 CustomView를 만들면 된다.

 

 

Custom View 만들기

Custom View는 다음 과정을 통해 만들어진다.

 

1. 먼저 @State Annotation을 이용해 값이 업데이트 되었을 때 Custom View가 보여지는 것이 업데이트 되어야 하는 변수를 선언한다.

2. body부에 1에서 선언된 State를 사용하는 View를 작성한다.

 

struct RandomNumberView: View {
    @State var [variable] : [variable Type] = [default Value] // State 선언

    var body: some View { 
        // CustomView 작성
    }
}

 

 

위 두가지를 사용하면 아래와 같이 CustomView를 만들 수 있다. 이 View 는 버튼을 클릭하면  number가 랜덤으로 바뀌는 View이다.

struct RandomNumberView: View {
    @State var number : Int = 1 // 1. State 선어언

    var body: some View { // CustomView 선언
        VStack { 
            Text("The number is \(number)")
            Button(action: {number = Int.random(in: 1...1000)},
                   label: {Text("ClickButton")})
        }
    }
}

 

CustomView 사용하기

위의 CustomView는 다른 View에서 다음과 같이 사용 가능하다.

struct ContentView: View {
    var body: some View {
        ZStack {
            RandomNumberView()
        }
    }
}

 

위 코드를 실행하면 다음과 같은 화면이 생성된다.

 

그림1. Custom View 예시

 

 

State 살펴보기

struct의 변수는 var로 선언되더라도 struct 내부에서 변경을 주기 위해서 func에  mutating 키워드를 붙여야 했다. 이 효과를 주는 것이 바로 @State이다. 만약 State를 선언하지 않으면 body에서 number을 바꾸려고 할 경우 "Cannot assign to property: 'self' is immutable" 오류가 뜬다. 이유는 struct 내부 변수는 변화가 불가능(immutable) 하기 때문이다.

 

그림2. State를 안썼을 때 오류

 

Cannot assign to property: 'self' is immutable는 stuct에서 내부 변수를 바꾸려고 할 때 뜨는 오류이다.

 

 

위 오류는 @State를 선언하면 사라진다. 즉, @State 는 struct의 변수를 변화 가능(mutable)하게 만들면서 이 값이 업데이트 되었을 때  CustomView 를 다시 그려내는 역할을 하는  Annotation이다.

 

그림3. State를 쓰면 사라지는 오류

 

반응형
    DevCho
    DevCho
    개발자의 개발 공간

    티스토리툴바