Lucas Clahar
Lucas Clahar

Reputation: 23

Unable to infer complex closure return type swiftUI

I'm trying to post data to the list but keep getting the error 'Unable to infer complex closure return type; add explicit type to disambiguate' how do I fix this?

import SwiftUI
struct ContentView: View {
    @State var data: [Post] = [Post]()
    @ObservedObject var networkManager = NetworkManager()
    @State private var searchTerm: String = "" {
        didSet {
            print(searchTerm)
        }
    }

    var body: some View {
        List { // ERROR SHOWS UP HERE
            SearchBar(text: $searchTerm)
            ForEach(data) { post in
                Text(post.fullname ?? "null")
            }
        }
        .onAppear {
            self.reload()
        }
        .onReceive(self.networkManager.posts, perform: { _ in
            self.reload()
        })
    }

    private func reload() {
        networkManager.fetchData(playerName: "messi")
        self.data = networkManager.posts
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Upvotes: 2

Views: 237

Answers (1)

Asperi
Asperi

Reputation: 257493

Assuming your NetworkManage.posts is @Published property the subscriber in view have to be specified as follow

.onReceive(self.networkManager.$posts, perform: {_ in    // << fixed !!
    self.reload()
})

Note: btw, didSet does not work for @State, so don't spend time on that.

Upvotes: 1

Related Questions