இந்த property wrapper-கள் அனைத்தும் மற்றும் என்பதை SwiftUI-க்குச் சொல்கின்றன. முக்கியப் பிரிவு (, ) vs (, , ), மேலும் 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 | Ownership | எப்போது பயன்படுத்துவது |
|---|---|---|---|
@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 vs @ObservedObject என்பது classic trap. @ObservedObject var m = Model() உடன் ஒரு model-ஐ உருவாக்குவது ஒவ்வொரு மறு-render-இலும் அதை மீண்டும் instantiate செய்கிறது, அமைதியாக state-ஐ இழக்கிறது. view object-ஐ உருவாக்கும் இடங்களில் @StateObject-ஐ பயன்படுத்துங்கள்..environmentObject(...) மூலம் inject செய்யவில்லை என்றால் @EnvironmentObject runtime-இல் crash ஆகும்.தவறான wrapper-ஐ தேர்ந்தெடுப்பது SwiftUI state bug-களின் முதல் காரணம் — மின்னும் value-கள், scroll-இல் reset-கள், அல்லது ஒருபோதும் update ஆகாத view-கள். @StateObject vs @ObservedObject பதில் SwiftUI-இன் ownership model-ஐ நீங்கள் புரிந்துகொள்கிறீர்களா என்பதை உடனடியாக வெளிப்படுத்துவதால் interviewer-கள் இதைக் கேட்கிறார்கள்.
விரிவான பதில்களுடன் கூடிய IT நேர்காணல் கேள்விகளின் நூலகம் — Junior முதல் Senior வரை.
நன்கொடை