I don’t get test in list go to different navigationview locations?








struct testView: View {

    private var listOfCountry = countrylist

    @State var searchText = ""

    

    

    var body: some View {

        

        NavigationView {

            List {

                

                ForEach(countries, id: \.self) { country in

                    HStack {

                        Text("")

                        Section(header: Text(country.capitalized))

                        {

                            Text("test")

                        }

                        if countrylist.contains("Test1") {

                            NavigationLink(destination: DataView()) {

                                Spacer()

                                Image(systemName: "percent")

                            }

                        }

                        else if countrylist.contains("Test2"){

                            NavigationLink(destination: Text("test")) {

                                Text("test")

                            }

                        }

                        else if countrylist.contains("Test3"){

                            NavigationLink(destination: Data2View()) {

                                Text("test")

                            }

                        }

                    }

            }

            }

            .searchable(text: $searchText)

            .navigationTitle("testview")

            .navigationBarTitleDisplayMode(.inline)

        }

        

    }

    

    var countries: [String] {

        let lcCountries = listOfCountry.map { $0.lowercased() }

        

        return searchText == "" ? lcCountries : lcCountries.filter {

            $0.contains(searchText.lowercased())

        }

    }

}

import Foundation



public var countrylist = ["test1", "test2", "test3"]

Normal. Swift is case sensitive:

public var countrylist = ["test1", "test2", "test3"]

So, this will always fail

if countrylist.contains("Test1") {

change to

if countrylist.contains("test1") { // <<-- test1 and not Test1

But I don't understand the logic:

                        if countrylist.contains("test1") {
                            NavigationLink(destination: DataView()) {
                                Spacer()
                                Image(systemName: "percent")
                            }
                        }
                        
                        else if countrylist.contains("test2"){
                            NavigationLink(destination: Text("test")) {
                                Text("test")
                            }
                        }
                        
                        else if countrylist.contains("test3"){
                            NavigationLink(destination: Data2View()) {
                                Text("test")
                            }
                        }

Why testing countrylist to contain test1, test2, test3 ? It contains them all

You probably mean country ?

                        if country.contains("test1") {
                            NavigationLink(destination: DataView()) {
                                Spacer()
                                Image(systemName: "percent")
                            }
                        } else if country.contains("test2"){
                            NavigationLink(destination: Text("test")) {
                                Text("test2")
                            }
                        } else if country.contains("test3"){
                            NavigationLink(destination: Data2View()) {
                                Text("test3")
                            }
                        }

Then whole code becomes(always better to show the full code):

struct DataView: View {
    
    var body: some View {
        Text("DataView")
    }
}

struct Data2View: View {
    
    var body: some View {
        Text("Data2View")
    }
}

public var countrylist = ["test1", "test2", "test3"]

struct TestView: View {     // start with Uppercase
    
    var countries: [String] {
        
        let lcCountries = listOfCountry.map { $0.lowercased() }
        
        return searchText == "" ? lcCountries : lcCountries.filter {
            $0.contains(searchText.lowercased())
        }
        
    }
    
    private var listOfCountry = countrylist
    @State var searchText = ""
    
    var body: some View {
        
        NavigationView {
            List {
                ForEach(countries, id: \.self) { country in
                    HStack {
                        Text("")
                        Section(header: Text(country.capitalized))
                        {
                            Text("test")
                        }
                        
                        if country.contains("test1") {
                            NavigationLink(destination: DataView()) {
                                Spacer()
                                Image(systemName: "percent")
                            }
                        } else if country.contains("test2"){
                            NavigationLink(destination: Text("test")) {
                                Text("test2")
                            }
                        } else if country.contains("test3"){
                            NavigationLink(destination: Data2View()) {
                                Text("test3")
                            }
                        }
                    }
                }
            }
            .searchable(text: $searchText)
            .navigationTitle("testview")
            .navigationBarTitleDisplayMode(.inline)
        }
    }
}
I don’t get test in list go to different navigationview locations?
 
 
Q