ეს property wrapper-ები SwiftUI-ს ეუბნება, და . მთავარი გაყოფაა (, ) versus (, , ), პლუს ის, თუ ვინ არის პასუხისმგებელი ობიექტის სიცოცხლის ხანგრძლივობაზე.
ეს property wrapper-ები SwiftUI-ს ეუბნება, და . მთავარი გაყოფაა (, ) versus (, , ), პლუს ის, თუ ვინ არის პასუხისმგებელი ობიექტის სიცოცხლის ხანგრძლივობაზე.
@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 | ტიპი | მფლობელობა | გამოიყენე, როცა |
|---|---|---|---|
@State | value | ეს view | მარტივი ლოკალური მდგომარეობა |
@Binding | value | მშობელი | შვილი რედაქტირებს მშობლის მდგომარეობას |
@StateObject | reference | ეს view (ერთხელ იქმნება) | view ქმნის მოდელს |
@ObservedObject | reference | სხვაგან | მოდელი გადმოცემულია |
@EnvironmentObject | reference | წინაპარი | გაზიარებული ხის სიღრმეში |
@StateObject vs @ObservedObject არის კლასიკური ხაფანგი. მოდელის შექმნა @ObservedObject var m = Model()-ით მას ხელახლა ინსტანცირებს ყოველ ხელახალ დახატვაზე, უხმაუროდ კარგავს მდგომარეობას. გამოიყენე @StateObject ყველგან, სადაც view ქმნის ობიექტს.@EnvironmentObject ავარიულად სრულდება გაშვების დროს, თუ არცერთმა წინაპარმა არ ჩააშენა ის .environmentObject(...)-ის მეშვეობით.არასწორი wrapper-ის არჩევა არის SwiftUI-ის მდგომარეობის ბაგების ნომერ პირველი წყარო — ციმციმა მნიშვნელობები, scroll-ზე reset-ები ან view-ები, რომლებიც არასდროს განახლდება. ინტერვიუერები ამას ეკითხებიან, რადგან @StateObject vs @ObservedObject პასუხი მყისვე ცხადყოფს, გესმის თუ არა SwiftUI-ის მფლობელობის მოდელი.
IT გასაუბრების კითხვების ბიბლიოთეკა დეტალური პასუხებით — Junior-დან Senior-მდე.
შემოწირულობა