无法将类型“[String]”的值分配给类型“[[String : Any]]”

Cannot assign value of type '[String]' to type '[[String : Any]]'

Swift Xcode 版本 13.2.1

这里我们有两个数组,(1)var dicSearch=String(2)var searchingDic: [[String: Any]]=[] 我想将 searchingDic 分配给 dicSearch 当我实现它时显示 error例如,无法将类型“[String]”的值分配给类型“[[String : Any]]” 这是我的代码,请大家帮忙!

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        searchingDic = dicSearch.filter{filtering in
            let filterService = filtering["fName"] as? String
            return((filterService?.lowercased().contains(searchText.lowercased()))!)
        }
     

看起来您正在尝试根据搜索词创建过滤列表,但您的 dicSearch 类型是 string 的数组(即:[String]),而您的 searchingDic 是字典数组(即:[[String : Any]])。

当来自不同的语言时,这可能会造成混淆,但在 Swift 中,以下声明是一个字典:

var dict: [String: Any] = [
    "key1": "value1",
    "key2": "value2",
]

所以如下:

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

实际上是一个数组,包含一个字典列表,注意我是如何将上面声明的dict放在第二个数组中的。

编译器告诉您不能分配 '[String]' to type '[[String : Any]]'

因为这个:

// 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
]

Array#filter方法,迭代数组本身,returns一个新数组,只有return true在return语句中的元素.

所以要么你的两个数组都需要 [String] 或者你的两个数组都需要 [[String:Any]]

字符串数组示例:


// 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"]

使用字典数组进行过滤的示例:

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"]]

希望这对您有所帮助:)