এই property wrapper-গুলো সবই SwiftUI-কে জানায় এবং । মূল বিভাজন হলো (, ) বনাম (, , ), এবং object-টির lifetime-এর জন্য কে দায়ী।
@State@Binding@StateObject@ObservedObject@EnvironmentObject// Value state OWNED by this view
struct Toggle: View {
@State private var isOn = false // local source of truth
var body: some View {
Switch(isOn: $isOn) // $ makes a Binding
}
}
// A two-way reference to state owned ELSEWHERE
struct Switch: View {
@Binding var isOn: Bool // no ownership; reads+writes parent
var body: some View { Button("\(isOn)") { isOn.toggle() } }
}
final class CartModel: ObservableObject {
@Published var items: [Item] = [] // change => views re-render
}
struct CartScreen: View {
@StateObject private var model = CartModel() // OWNS: created once, survives re-renders
var body: some View { CartList(model: model) }
}
struct CartList: View {
@ObservedObject var model: CartModel // observes; owned by a parent
var body: some View { Text("\(model.items.count)") }
}
| Wrapper | Type | মালিকানা | কখন ব্যবহার |
|---|---|---|---|
@State | value | এই view | সাধারণ local state |
@Binding | value | একটি parent | child parent-এর state edit করে |
@StateObject | reference | এই view (একবার তৈরি) | view model তৈরি করে |
@ObservedObject | reference | অন্যত্র | model pass করা হয় |
@EnvironmentObject | reference | ancestor | tree-র গভীরে শেয়ার করা |
@StateObject বনাম @ObservedObject হলো ক্লাসিক ফাঁদ। @ObservedObject var m = Model() দিয়ে একটি model তৈরি করলে প্রতিটি re-render-এ এটি পুনরায় instantiate হয়, নীরবে state হারায়। view যেখানে object-টি তৈরি করে সেখানে @StateObject ব্যবহার করুন।@EnvironmentObject runtime-এ crash করে যদি কোনো ancestor .environmentObject(...)-এর মাধ্যমে এটি inject না করে থাকে।ভুল wrapper বেছে নেওয়া SwiftUI state bug-এর এক নম্বর উৎস — flickering value, scroll-এ reset, বা view যা কখনো update হয় না। ইন্টারভিউয়াররা এটি জিজ্ঞাসা করেন কারণ @StateObject বনাম @ObservedObject-এর উত্তর তৎক্ষণাৎ প্রকাশ করে আপনি SwiftUI-এর ownership model বোঝেন কিনা।
বিস্তারিত উত্তরসহ IT ইন্টারভিউ প্রশ্নের একটি লাইব্রেরি — জুনিয়র থেকে সিনিয়র পর্যন্ত।
দান করুন