无法将类型“[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"]]
希望这对您有所帮助:)
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"]]
希望这对您有所帮助:)