Saya tidak yakin apakah ini adalah antipattern dalam dunia SwiftUI baru yang berani yang kita tinggali ini, tetapi pada dasarnya saya memiliki @EnvironmentObject dengan beberapa informasi pengguna dasar yang tersimpan di dalamnya sehingga pandangan saya dapat dipanggil.
Saya juga memiliki @ObservedObject yang memiliki beberapa data yang diperlukan untuk tampilan ini.
Ketika tampilan muncul, saya ingin menggunakan @EnvironmentObject untuk menginisialisasi @ObservedObject:
struct MyCoolView: View {
@EnvironmentObject userData: UserData
@ObservedObject var viewObject: ViewObject = ViewObject(id: self.userData.UID)
var body: some View {
Text("\(self.viewObject.myCoolProperty)")
}
}
Sayangnya saya tidak dapat menyebut diri pada variabel lingkungan sampai setelah inisialisasi:
"Tidak dapat menggunakan instance anggota 'userData' dalam inisialisasi properti; inisialisasi properti dijalankan sebelum 'diri' tersedia."
Saya dapat melihat beberapa kemungkinan rute ke depan, tetapi semuanya terasa seperti retasan. Bagaimana saya harus mendekati ini?
init
ke struct.Property wrappers are not yet supported on local properties
Pada dasarnya ini mengatakan saya tidak dapat membuat @ObservedObject dengan metode init.Jawaban:
Inilah pendekatannya (IMO paling sederhana):
sumber
alih-alih membuat subview Anda bisa menambahkan inisialisasi dummy ke Anda
"ViewObject"
sehingga Anda dapat memanggilnya sebelum memanggil inisialisasi nyatauntuk catatan saya belum mengujinya
sumber
Ini cara mudah untuk melakukannya:
Dengan pembantu ini yang membuatnya bekerja:
sumber