I have backend API caller file that retrieves and displays unwrapped JSON data via URLRequest(). All the data is printed to my console when I build the project but it's not being displayed in the actual UI of my iOS simulator.
I have a class in my ContentView that updates the UI and filters the extracted fields shown here below:
class NotionCall: ObservableObject { @Published var extractedContent: [BlockBody.Block] = [] func makeAPIRequest() { makeRequest { results in let extractedData = results.map { block -> BlockBody.Block in var extractedBlock = block extractedBlock.ExtractedFields = block.paragraph?.textFields.compactMap { textField in textField.PlainText ?? textField.RichText ?? textField.content //iterate over PlainText, RichText, and Content fields and return the non nill values } ?? [] //validate objects even if they are nil return extractedBlock } DispatchQueue.main.async { self.extractedContent = extractedData } } } } @StateObject var NotionCaller = NotionCall() //manage lifecycle of instance
And then below here is my SwiftUI structure that contains List(NotionCaller.extractedContent) { block in ForEach(block.ExtractedFields, id: \.self) { field in Text(field)
meant to display the extracted data to the UI:
var body: some View { NavigationStack { ZStack { List(NotionCaller.extractedContent) { block in ForEach(block.ExtractedFields, id: \.self) { field in Text(field) } } ZStack { Color(hex: "#f9f9f9") .ignoresSafeArea() VStack { TextField(" Search keywords", text: $searchKeywords) //change font later .frame(height: 48) .overlay(RoundedRectangle(cornerRadius: 30).strokeBorder(style: StrokeStyle())) .foregroundColor(.white) .background(.white) .cornerRadius(30) .padding() .scaledToFit() .frame(maxHeight: .infinity, alignment: .top) } VStack { Spacer() Divider() .padding() HStack { Button(action: { //add functionality later }) { Image("menuButton") .frame(alignment: .bottom) .padding(.horizontal, 42) Spacer() } HStack { Button(action: { //add functionality later }) { Image("notificationButton") .frame(alignment: .leading) .padding(.leading, 30) Spacer() } } HStack { Button(action: { }) { Image("notionImportButton") .frame( alignment: .trailing) .padding(.horizontal) .padding(.horizontal) } } } .onAppear { NotionCaller.makeAPIRequest() } } } } } } }