Q: Cannot assign value of type '[String]' to type '[[String : Any]]' Swift Xcode version 13.2.1
Here we have two Arrays,(1)var dicSearch=String and  (2)var searchingDic: [[String: Any]]=[] I want to assign searchingDic to dicSearch when i implement it than it show error like, Cannot assign value of type '[String]' to type '[[String : Any]]'
here's my code, please anyone help!
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        searchingDic = dicSearch.filter{filtering in
            let filterService = filtering["fName"] as? String
            return((filterService?.lowercased().contains(searchText.lowercased()))!)
        }
     


A: It looks like you are trying to create a filtered list based on a search term, but your dicSearch type is an array of strings (i.e: [String]), while your  searchingDic is an array of dictionaries (i.e: [[String : Any]]).
This might be confusing when coming from a different language, but in Swift, the following declaration is a dictionary:
var dict: [String: Any] = [
    "key1": "value1",
    "key2": "value2",
]

so the following:
var arrayOfdicts: [[String: Any]] = [
  ["foo": "bar"],
  ["apples": "oranges"],
  dict
]

is actually an array, containing a list of dictionaries, notice how I've put the dict declared above in the second array.
The compiler is telling you that you cannot assign a '[String]' to type '[[String : Any]]'
because this:
// example to an array of strings 
var fullList: [String] = [
    "apples",
    "bananas",
    "cucumbers"
]

// is not the same as 
var arrayOfdicts: [[String: Any]] = [
  ["foo": "bar"],
  ["apples": "oranges"],
  dict
]

The Array#filter method, iterates the array itself, and returns a new array with only the elements that return true in the return statement.
so either both your arrays need to be [String] or both your arrays need to be [[String:Any]]
example for String arrays:

// array
var fullList: [String] = [
    "apples",
    "bananas",
    "cucumbers"
]


var filteredList: [String] = []


var searchTerm = "b"

filteredList = fullList.filter{ item in
  let value = item
  return value.lowercased().contains(searchTerm)
}

print(filteredList) // prints ["bananas", "cucumbers"]

an example for filtering with array of dictionaries:
var people: [[String: Any]] = [
    ["name": "Joe"],
    ["name": "Sam"],
    ["name": "Natalie"],
    ["name": "Eve"]
]


var filteredPeople: [[String: Any]] = []

var nameFilter = "a"

filteredPeople = people.filter{ item in
  let value = item["name"] as! String
  return value.lowercased().contains(nameFilter)
}

print(filteredPeople) // prints [["name": "Sam"], ["name": "Natalie"]]

Hope this helps :)
