آموزش 13: اشیاء قابل مشاهده و اشیاء محیط زیست در Swiftui

مقدمه
در این آموزش ، ما کاوش خواهیم کرد قابل مشاهده وت محیط در Swiftui ، که برای مدیریت وضعیت در برنامه شما ضروری است. ما از این مفاهیم برای ساختن یک بازی ساده آیفون استفاده خواهیم کرد. با پایان این آموزش ، خواهید فهمید:
- تفاوت بین
@State
با@ObservedObject
وت@EnvironmentObject
- نحوه استفاده
ObservableObject
برای مدیریت داده ها - نحوه به اشتراک گذاری داده ها در نمای با
EnvironmentObject
- نحوه استفاده از این دانش برای ساختن یک بازی ساده در Swiftui
- نحوه اعمال swiftui در در مقابل کد
پیش نیازهای
قبل از شروع ، اطمینان حاصل کنید که:
- Xcode نصب شده (آخرین نسخه توصیه شده)
- دانش سریع (سطح اساسی تا متوسط)
- در مقابل کد با پسوند Swift نصب شده (برای توسعه جایگزین)
درک مدیریت دولت Swiftui
@State
- مورد استفاده برای مدیریت ساده دولت در یک نمای واحد.
- هنگامی که حالت تغییر می کند ، به طور خودکار نمای را تازه می کند.
مثال:
struct CounterView: View {
@State private var count = 0
var body: some View {
VStack {
Text("Count: \(count)")
Button("Increment") {
count += 1
}
}
}
}
@ObservedObject
- هنگامی که چندین نمایش نیاز به به اشتراک گذاری حالت دارد استفاده می شود.
- نیاز به یک کلاس مطابق با
ObservableObject
بشر
مثال:
class CounterModel: ObservableObject {
@Published var count = 0
}
struct CounterView: View {
@ObservedObject var model = CounterModel()
var body: some View {
VStack {
Text("Count: \(model.count)")
Button("Increment") {
model.count += 1
}
}
}
}
@EnvironmentObject
- برای تزریق داده های مشترک به چندین نمایش بدون صریح عبور از آن استفاده می شود.
- نیاز دارد
.environmentObject()
اصلاح کننده در نمای والدین.
مثال:
class GameSettings: ObservableObject {
@Published var score = 0
}
struct ScoreView: View {
@EnvironmentObject var settings: GameSettings
var body: some View {
Text("Score: \(settings.score)")
}
}
ساختن یک بازی ساده: روی دایره ضربه بزنید
مرحله 1: یک مدل بازی ایجاد کنید
class GameModel: ObservableObject {
@Published var score = 0
@Published var position = CGPoint(x: 100, y: 100)
}
مرحله 2: نمای بازی را بسازید
struct GameView: View {
@EnvironmentObject var game: GameModel
var body: some View {
ZStack {
Color.blue.edgesIgnoringSafeArea(.all)
Circle()
.fill(Color.red)
.frame(width: 50, height: 50)
.position(game.position)
.onTapGesture {
game.score += 1
game.position = CGPoint(x: CGFloat.random(in: 50...350), y: CGFloat.random(in: 50...700))
}
VStack {
Text("Score: \(game.score)")
.font(.largeTitle)
.padding()
Spacer()
}
}
}
}
مرحله 3: نمای ریشه را تنظیم کنید
@main
struct MyApp: App {
@StateObject private var game = GameModel()
var body: some Scene {
WindowGroup {
GameView()
.environmentObject(game)
}
}
}
پایان
در این آموزش ، شما یاد گرفتید که چگونه استفاده کنید @State
با @ObservedObject
وت @EnvironmentObject
در Swiftui شما همچنین یک بازی ساده ساخته اید که UI را به صورت پویا با استفاده از این مفاهیم به روز می کند. سرانجام ، شما نحوه کار با Swiftui را در VS Code بررسی کردید.
با این دانش ، اکنون می توانید برنامه های Swiftui پیچیده تر و تعاملی تر بسازید!