Posts

Post not yet marked as solved
0 Replies
557 Views
Requirement: Build the List view having thumbnail image for each of the rows (same as in the developer video). Each row having its own dependency on ObservableObject to render view when image is loaded dynamically. Challenge: Since we don't have @StateObject in iOS 13 and I can't instantiate @ObservedObject inside view's init method, what options do I have to manage lifecycle of ObservableObject outside views lifecycle? For now I could think of only one solution, i.e having Singleton object to take care of memory management of ObservableObject objects List { ForEach(list) { item in MyCustomView(model:Builder.buildImageLoader()) } public class Builder { 		private static var imageLoaders: [ImageLoader]?     static func buildImageLoader() -> ImageLoader {         let imageLoader = ImageLoader()         imageLoaders?.append(imageLoader)         return imageLoader     }     static func release(_ imageLoader: ImageLoader) {         imageLoaders = imageLoaders?.filter({ (loader) -> Bool in             return loader === imageLoader         })     } struct MyCustomView: View { @ObservedObject private var imageLoader: ImageLoader var body: some View { HStack { if imageLoader.image != nil { Image(uiImage: imageLoader.image!) } else { EmptyView() } } .onAppear {             self.imageLoader.laod(self.url)         } .onDisappear {             Builder.release(self.imageLoader)         } } } } It's certainly not looking good & can be better. Please help me to reorganize the code. I am even thinking of releasing all the Builder.imageLoaders in .onAppear of List instead of what I have done in above code but not sure what could be better approach.
Posted Last updated
.