Swift 字典映射认为字符串是字符串数组
我试图用字典重新构造数据,但底部第5行给出的错误如下: 无法将“[String]”类型的值转换为预期的参数类型“String”Swift 字典映射认为字符串是字符串数组,swift,dictionary,Swift,Dictionary,我试图用字典重新构造数据,但底部第5行给出的错误如下: 无法将“[String]”类型的值转换为预期的参数类型“String” 据我所知,Collapsed.category\u name和Item2.category\u name都是字符串,那么问题出在哪里?错误很明显 无法将“[String]”类型的值转换为预期的参数类型“String” 这行代码$0.value.map{$0.category_name}将返回[String]您正在使用属性category_name设置它,该属性categ
据我所知,Collapsed.category\u name和Item2.category\u name都是字符串,那么问题出在哪里?错误很明显 无法将“[String]”类型的值转换为预期的参数类型“String” 这行代码$0.value.map{$0.category_name}将返回[String]您正在使用属性category_name设置它,该属性category_name是字符串类型,基于您在menu2数组中添加的数据,您需要设置的是分组字典中第一个对象的category_name,因为category_id和category_name都属于对方 所以不是 你需要有 解决此问题后,您将在行项目上得到错误:$0.value.map{$0.name} 无法将“[String]”类型的值转换为预期的参数类型“[Item]” 所以不是 你需要有
你为什么要绘制地图?为什么不直接做category_name:$0.value.category_name@RakeshaShastri$0.value是数组,因此您需要从中访问第一个对象,因此它应该类似于category_name:$0.value.first?.category_name@RakeshaShastri我忘了添加我的项目结构以清楚说明。我之所以映射它,是因为我想在一个结构中折叠我的平面项目结构,该结构在每个类别下都有项目排序。我忘了添加我的项目结构,这不是打字错误。我现在加上去了。但在应用您的建议后,我在下一行遇到了类似的错误:无法将“String”类型的值转换为“Item”类型的闭包结果@Gimmethe411行是什么?对于Item struct?,您需要将其设置为默认空数组?@Gimmethe411也必须是错误,无法将“[String]”类型的值转换为闭包结果类型“[Item]”,我现在添加了它,是的,只是一个默认的空数组。@Gimmethe411请检查编辑过的答案并设置项:$0.value.map{Itemname:$0.name,rows:[]}
struct Item2 {
var itemid: Int
var category_id: Int
var category_name: String
var name: String
}
struct Item{
var name = String()
var rows = [Row]()
}
struct Row{
var size: Int
}
struct Collapsed{
var category_opened = Bool()
var category_id = Int()
var category_name = String()
var items = [Item]()
}
let menu2 = [
Item2(itemid: 5, category_id: 0, category_name: "category1", name: "item1"),
Item2(itemid: 2, category_id: 0, category_name: "category1", name: "item2"),
Item2(itemid: 3, category_id: 0, category_name: "category1", name: "item3"),
Item2(itemid: 1, category_id: 1, category_name: "category2", name: "item4"),
Item2(itemid: 7, category_id: 1, category_name: "category2", name: "item5"),
Item2(itemid: 9, category_id: 1, category_name: "category2", name: "item6")]
let mapping = Dictionary(grouping: menu2, by: { $0.category_id })
// Map that dictionary into an array of Sorted and then sort that array by category_id
let collapsedItems: [Collapsed] = mapping.map {
Collapsed(
category_opened: false,
category_id: $0.key,
category_name: $0.value.map { $0.category_name }, // Error: Cannot convert value of type '[String]' to expected argument type 'String'
items: $0.value.map { $0.name }
)
}
.sorted { $0.category_id < $1.category_id }
category_name: $0.value.map { $0.category_name },
category_name: $0.value.first?.category_name ?? "",
// You can force wrap the first property too as of you have make dictionary using grouping it will at least have single object.
items: $0.value.map { $0.name }
items: $0.value.map { Item(name: $0.name, rows: []) }