Untitled

 avatar
unknown
swift
a month ago
1.5 kB
4
Indexable
struct ProfileView: View, Identifiable {
    var id: String {
        return name
    }
    let name: String

    var body: some View {
        return Text(name)
    }
}

final class ProfileViewModel: ObservableObject {
    @Published var filterText: String = ""
    @Published var elements: [ProfileView] = []

    var filteredElements: [ProfileView] {
        return elements.filter { $0.name.contains(filterText) }
    }

}

struct List2: View {
    @ObservedObject var ugaBugaViewModel = ProfileViewModel()

    var body: some View {
        List {
            ForEach(ugaBugaViewModel.filteredElements, content: { element in
                return element
            })
        }
    }
}


protocol Renderable {
    associatedtype Render: View
    func render() -> Render
}

struct RenderableProfile: Renderable, Identifiable {
    var id: String {
        return name
    }
    let name: String

    func render() -> some View {
        return Text(name)
    }
}

final class RenderableViewModel: ObservableObject {
    @Published var filterText: String = ""
    @Published var elements: [RenderableProfile] = []

    var filteredElements: [RenderableProfile] {
        return elements.filter { $0.name.contains(filterText) }
    }

}

struct List3: View {
    @ObservedObject var ugaBugaViewModel = RenderableViewModel()

    var body: some View {
        List {
            ForEach(ugaBugaViewModel.filteredElements, content: { element in
                return element.render()
            })
        }
    }
}
Leave a Comment