Saya mencoba membuat pembungkus properti khusus yang didukung oleh SwiftUI, yang berarti bahwa perubahan nilai properti terkait akan menyebabkan pembaruan ke tampilan SwiftUI. Ini adalah versi sederhana dari apa yang saya miliki:
@propertyWrapper
public struct Foo: DynamicProperty {
@ObservedObject var observed: SomeObservedObject
public var wrappedValue: [SomeValue] {
return observed.value
}
}
Saya melihat bahwa meskipun konten saya ObservedObject
ada di dalam pembungkus properti khusus saya, SwiftUI masih menerima perubahan SomeObservedObject
selama:
- Wrapper properti saya adalah sebuah struct
- Pembungkus properti saya sesuai dengan
DynamicProperty
Sayangnya dokumennya jarang dan saya kesulitan mengatakan apakah ini hanya kurang berhasil dengan implementasi SwiftUI saat ini.
Dokumen dari DynamicProperty
(dalam Xcode, bukan online) tampaknya menunjukkan bahwa properti seperti itu adalah properti yang diubah dari luar yang menyebabkan pandangan untuk digambar ulang, tetapi tidak ada jaminan tentang apa yang terjadi ketika Anda menyesuaikan jenis Anda sendiri dengan protokol ini.
Bisakah saya berharap ini terus bekerja dalam rilis SwiftUI di masa depan?
sumber
Jawaban:
Ok ... di sini adalah pendekatan alternatif untuk mendapatkan hal serupa ... tetapi sebagai struct hanya
DynamicProperty
melilit@State
(untuk memaksa tampilan refresh).Ini adalah pembungkus sederhana tetapi memberikan kemungkinan untuk melakukan inkapsulasi setiap kalkulasi khusus dengan penyegaran tampilan berikut ... dan sebagaimana dikatakan menggunakan tipe hanya nilai.
Ini demo (diuji dengan Xcode 11.2 / iOS 13.2):
Ini kode:
sumber