You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
앱은 크게 UI와 데이터로 구성됩니다. UI는 데이터를 시각적으로 보여주기 위한 수단입니다.
데이터의 정보가 변경되면 UI는 변경된 정보를 보여줘야 합니다.
structContentView:View{
// 데이터
@Stateprivatevardata=Data()
// UI 묘사
varbody:someView{Text(data.name)}}
5min Swift 에서 데이터모델을 다뤄보도록 하겠습니다.
2. 데이터모델
2.1. 데이터모델 정의
뷰에서 사용될 데이터는 @Observable 키워드를 class 앞에 붙여줍니다. @Observable 키워드가 붙은 데이터는 데이터 내에 변경(Mutating)이 발생했을 때 관련된 뷰에게 값이 변경 되었으니 UI를 갱신하라는 요청(Publishing)을 합니다. @Observable 키워드를 사용하려면 import Observation을 해줘야 합니다.
// 모델
structBook{...}
// 데이터
import Observation
@ObservableclassLibrary{varbooks:[Book]=[]func addBook(_ book:Book){...}}
2.2. 데이모델의 사용
이렇게 정의된 데이터는 뷰에서 일반적인 프로퍼티 선언을 통해 사용할 수 있습니다. 데이터 내의 변경사항이 발생하면, @Observable키워드에 의해 별도의 @State키워드 없이도 UI를 갱신할 수 있습니다.
import SwiftUI
structMyView:View{letlibrary:Libraryvarbody:someView{VStack{Text("\(library.books.count)") // 데이터 사용
Button("Add book"){
library.addBook(...) // 액션 실행 시 위의 Text 가 표출하는 값이 업데이트 됨
}}}}
2.1. @State
뷰에서 직접 데이터 변경이 필요한 경우 @State 키워드를 통해 객체를 생성하여 바인딩을 가능케 할 수 있습니다. SwiftUI에서 기본 타입(예: Bool, String, Int 등)의 변수에 @State 키워드를 붙여 사용하는 것과 동일합니다.
import SwiftUI
structContentView:View{
// 데이터 객체 생성
@Stateprivatevarlibrary=Library()varbody:someView{
// 데이터 바인딩
TextField("search", text: $library.searchKeyword)}}
3. 뷰간 데이터 전달
하위뷰에 데이터를 전달할 때 기억해야할 키워드는 @Bindable, @Environment 이렇게 2개가 있습니다.
자식 뷰와 같이 뷰 계층 구조상 직접 연결되어 있는 하위 뷰에게 데이터를 연결 시켜줄 때는 간단하게 프로퍼티로 넘겨주면 됩니다. (항목 2.2 참고)
예) ChildView(library: library)
하지만 그 하위 뷰에서 데이터를 변경해야해서 바인딩 하고 싶을 때는 @Bindable 키워드를 붙여 사용해야 합니다.
만약 여러 뷰에서 데이터를 좀 더 쉽게 접근하고 싶을 때(전역에서 접근)는 @Environment 를 사용하면 됩니다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
🂳
1. 개요
앱은 크게 UI와 데이터로 구성됩니다. UI는 데이터를 시각적으로 보여주기 위한 수단입니다.
데이터의 정보가 변경되면 UI는 변경된 정보를 보여줘야 합니다.
5min Swift 에서 데이터모델을 다뤄보도록 하겠습니다.
2. 데이터모델
2.1. 데이터모델 정의
뷰에서 사용될 데이터는
@Observable키워드를 class 앞에 붙여줍니다.@Observable키워드가 붙은 데이터는 데이터 내에 변경(Mutating)이 발생했을 때 관련된 뷰에게 값이 변경 되었으니 UI를 갱신하라는 요청(Publishing)을 합니다.@Observable키워드를 사용하려면import Observation을 해줘야 합니다.2.2. 데이모델의 사용
이렇게 정의된 데이터는 뷰에서 일반적인 프로퍼티 선언을 통해 사용할 수 있습니다. 데이터 내의 변경사항이 발생하면,
@Observable키워드에 의해 별도의@State키워드 없이도 UI를 갱신할 수 있습니다.2.1.
@State뷰에서 직접 데이터 변경이 필요한 경우
@State키워드를 통해 객체를 생성하여 바인딩을 가능케 할 수 있습니다. SwiftUI에서 기본 타입(예:Bool,String,Int등)의 변수에@State키워드를 붙여 사용하는 것과 동일합니다.3. 뷰간 데이터 전달
하위뷰에 데이터를 전달할 때 기억해야할 키워드는
@Bindable,@Environment이렇게 2개가 있습니다.자식 뷰와 같이 뷰 계층 구조상 직접 연결되어 있는 하위 뷰에게 데이터를 연결 시켜줄 때는 간단하게 프로퍼티로 넘겨주면 됩니다. (항목 2.2 참고)
예)
ChildView(library: library)하지만 그 하위 뷰에서 데이터를 변경해야해서 바인딩 하고 싶을 때는
@Bindable키워드를 붙여 사용해야 합니다.만약 여러 뷰에서 데이터를 좀 더 쉽게 접근하고 싶을 때(전역에서 접근)는
@Environment를 사용하면 됩니다.3.1.
@Bindable3.2.
@Environment4. 참고
WWDC23 | Discover Observation in SwiftUI

All reactions