使用状態、観測可能オブジェクト、環境オブジェクト
☕️ SwiftUI
このため、SWIFTUIは、状態プロパティ、観測可能オブジェクト、および環境オブジェクトを提供する.
🍶 ステータスの提供
-ボタンがアクティブかどうか、テキストフィールドに入力されたテキストなどを切り替えます.
struct Test04: View {
@State private var wifiEnabled = true
@State private var userName = ""
var body: some View {
VStack{
Toggle(isOn: $wifiEnabled, label: {
Text("Enable Wi-Fi")
})
Image(systemName: wifiEnabled ? "wifi":"wifi.slash").resizable().frame(width: /*@START_MENU_TOKEN@*/100/*@END_MENU_TOKEN@*/, height: /*@START_MENU_TOKEN@*/100/*@END_MENU_TOKEN@*/, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/).foregroundColor(.red)
TextField("Enter user name",text:$userName)
Text(userName).font(.largeTitle)
}
}
}
🍹 SystemNameイメージリファレンス:SF Symbol図面の内蔵ライブラリにアクセスできます.SF Symbolは、アップルプラットフォームアプリケーションの開発に使用できるベクトル画像のセットです.
🤿 バインドステータス
// 상태 바인딩
struct Test05: View {
@State private var wifiEnable = true
var body: some View {
VStack{
Toggle(isOn: $wifiEnable, label: {
Text("wifi")
})
//이미지 뷰어를 외부로 정의
//파라미터로 상태 속성을 보내준다
WifiImageView(wifiEnable:$wifiEnable)
}
}
}
//이미지 뷰를 외부로 따로 선언
struct WifiImageView:View{
//상태 바인딩
@Binding var wifiEnable : Bool
var body: some View{
Image(systemName: wifiEnable ? "wifi" : "wifi.slash")
}
}
🎯 観測対象
非
// 간단한 observable 객체 선언
import Foundation
import Combine //Combime 프레임워크 import
class DemoData : ObservableObject{
@Published var userCount = 0
@Published var currentUser = ""
init(){
//데이터를 초기화하는 코드가 여기에 온다
updateDate()
}
func updateDate(){
// 데이터를 최신 상태로 유기하기 위한 코드가 여기에 온다
}
}
struct Test06_Observable: View {
//키워드 헷갈리지 않게 주의!!
@ObservedObject var demoData : DemoData
var body: some View {
Text("\(demoData.currentUser),you are user number \(demoData.userCount)")
}
}
struct Test06_Observable_Previews: PreviewProvider {
static var previews: some View {
Test06_Observable(demoData: DemoData())
}
}
🎹 環境オブジェクト
let contentView = ContentView()
//DemoData 객체의 인스턴트를 저장
let demoData = DemoData()
if let windowScene = scene as? UIWindowScene{
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView.environmentObject(demoData))
self.window = window'
window.makeKeyAndVisible()
}
//미리보기 뷰에서 environment 객체를 사용하려면 프리뷰 선언뷰를 수정해야한다
struct content_Previews: PreviewProvider{
static var previews: some View{
ContentView().environmentObject(DemoData())
}
}
🎖 整理する
ステータス構成
사용자 인터페이스 레이아웃 내의 뷰 상태를 저장
현재 콘텐트 뷰에 관한 것
값은 임시적이어서 해당 뷰가 사라지면 값도 없어진다
観測対象配置
사용자 인터페이스 밖에 있으며 앱 내의 SwiftUI 뷰 구조체의 하위 뷰에만 필요한 데이터에서 사용
데이터를 표시하는 클래스나 구조체는 ObservableObject 프로토콜을 따라야함
뷰와 바인딩될 프로퍼티는 @Published 프로퍼티 래퍼를 사용하여 선언
뷰 선언부에 Observable 객체 프로퍼티와 바인딩하려면 프로퍼티는 @ObseredObject 프로퍼티 래퍼를 사용
環境オブジェクトの構成
사용자 인터페이스 밖에 있으며 여러 뷰가 접근 해야하는 데이터에 사용
Observable 객체와 동일한 방법으로 선언
@EnvironmentObject 프로퍼티 래퍼를 사용하여 SwiftUI 뷰 파일 내에 선언
SceneDelegate.swift 파일의 코드를 통해 뷰 화면이 앱에 추가될 때 Enivronment 객체 또한 초기화해야 함
Reference
この問題について(使用状態、観測可能オブジェクト、環境オブジェクト), 我々は、より多くの情報をここで見つけました https://velog.io/@honeyoung_0117/상태-Observable-객체-그리고-Enviroment-객체로-작업하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol