ContentView.swift
// // ContentView.swift // SwiftUIProject // // Created by Cairocoders // import SwiftUI struct ContentView: View { @ObservedObject var sc = SourceCountry() @State var nextIndex = 1 init() { sc.getCountry(at: 0) } @State var show = false var body: some View { NavigationView { ScrollView { LazyVStack(alignment: .leading) { ForEach(sc.countries.indices, id: \.self) { countryIndex in let country = sc.countries[countryIndex] NavigationLink(destination: DetailsView(viewdata: Country(id: country.id, emoji: country.emoji, name: country.name))) { VStack { Text(country.name) .font(.title) .fontWeight(.bold) Text("\(country.emoji)") .font(.system(size: 200)) .padding(.horizontal) .onAppear { if countryIndex == sc.countries.count - 3 { sc.getCountry(at: nextIndex) nextIndex += 1 } } } } } } .padding() } .navigationTitle("Country") } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }Model.swift
// // Model.swift // SwiftUIProject // // Created by Cairocoders // import SwiftUI struct Country: Identifiable { let id: Int let emoji: String let name: String } class SourceCountry: ObservableObject { @Published var countries = [Country]() func getCountry(at index: Int) { print("page", index) switch index { case 0: countries.append(contentsOf: [ Country(id: 1, emoji: "🇦🇩", name: "AD"), Country(id: 2, emoji: "🇦🇪", name: "AE"), Country(id: 3, emoji: "🇦🇫", name: "AF"), Country(id: 4, emoji: "🇦🇬", name: "AG"), Country(id: 5, emoji: "🇦🇮", name: "AI"), Country(id: 6, emoji: "🇦🇱", name: "AL"), Country(id: 7, emoji: "🇦🇲", name: "AM"), Country(id: 8, emoji: "🇦🇴", name: "AO"), Country(id: 9, emoji: "🇦🇶", name: "AQ"), Country(id: 10, emoji: "🇦🇷", name: "AR") ]) case 1: countries.append(contentsOf: [ Country(id: 11, emoji: "🇦🇸", name: "AS"), Country(id: 12, emoji: "🇦🇹", name: "AT"), Country(id: 13, emoji: "🇦🇺", name: "AU"), Country(id: 14, emoji: "🇦🇼", name: "AW"), Country(id: 15, emoji: "🇦🇽", name: "AX"), Country(id: 16, emoji: "🇦🇿", name: "AZ"), Country(id: 17, emoji: "🇧🇦", name: "BA"), Country(id: 18, emoji: "🇧🇧", name: "BB"), Country(id: 19, emoji: "🇧🇩", name: "BD"), Country(id: 20, emoji: "🇧🇪", name: "BE") ]) case 2: countries.append(contentsOf: [ Country(id: 21, emoji: "🇧🇫", name: "BF"), Country(id: 22, emoji: "🇧🇬", name: "BG"), Country(id: 23, emoji: "🇧ðŸ‡", name: "BH"), Country(id: 24, emoji: "🇧🇮", name: "BI"), Country(id: 25, emoji: "🇧🇯", name: "BJ"), Country(id: 26, emoji: "🇧🇱", name: "BL"), Country(id: 27, emoji: "🇧🇲", name: "BM"), Country(id: 28, emoji: "🇧🇳", name: "BN"), Country(id: 29, emoji: "🇧🇴", name: "BO"), Country(id: 30, emoji: "🇧🇶", name: "BQ") ]) case 3: countries.append(contentsOf: [ Country(id: 31, emoji: "🇧🇷", name: "BR"), Country(id: 32, emoji: "🇧🇸", name: "BS"), Country(id: 33, emoji: "🇧🇹", name: "BT"), Country(id: 34, emoji: "🇧🇻", name: "BV"), Country(id: 35, emoji: "🇧🇼", name: "BW"), Country(id: 36, emoji: "🇧🇾", name: "BY"), Country(id: 37, emoji: "🇧🇿", name: "BZ"), Country(id: 38, emoji: "🇨🇦", name: "CA"), Country(id: 39, emoji: "🇨🇨", name: "CC"), Country(id: 40, emoji: "🇨🇩", name: "CD") ]) default: break } } }DetailsView.swift
// // DetailsView.swift // SwiftUIProject // // Created by Cairocoders // import SwiftUI struct DetailsView: View { var viewdata: Country var body: some View { VStack { Text("\(viewdata.emoji) \(viewdata.name)") .font(.system(size: 200)) .padding(.horizontal) } } } struct DetailsView_Previews: PreviewProvider { static var previews: some View { DetailsView(viewdata: Country(id: 1, emoji: "🇦🇩", name: "Ph")) } }