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 }
辞書を使用してデータを再構築しようとしていますが、下から5行目に次のようなエラーが表示されます。
タイプ '[String]'の値を期待される引数タイプ 'String'に変換できません
私の知る限り、Collapsed.category_name
そしてItem2.category_name
両方の文字列なので、問題は何ですか?
エラーはかなり明白です。
タイプ '[String]'の値を期待される引数タイプ 'String'に変換できません
このコード行が$0.value.map { $0.category_name }
返されます[String]
、あなたがプロパティでそれを設定しているcategory_name
の一種で、String
あなたが追加したことを、あなたのデータに基づいて、MENU2あなたがセットに必要なものをアレイの両方ので、グループ化辞書から最初のオブジェクトのカテゴリ名であるcategory_id
とはcategory_name
に属していますお互い。
だから代わりに
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 }
タイプ '[String]'の値を期待される引数タイプ '[Item]'に変換できません
だから代わりに
items: $0.value.map { $0.name }
あなたが持っている必要があります
items: $0.value.map { Item(name: $0.name, rows: []) }
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加