2

@FetchRequestを返すメイン画面がありますFetchResult<Item>Itemそのメイン画面には、選択するとビューに を渡すナビゲーション リンクを含むすべての項目のリストがありItemDetailます。このItemDetailビューでは、アイテムは でマークされてい@ObservedObjectます。のサブビューにItemDetailItemPropertiesView、アイテムのすべてのプロパティが一覧表示されます。@BindingアイテムのプロパティをItemPropertiesViewusingのプロパティに直接渡します$item.{insert property here}。ItemPropertiesView には、LineItemもう一度 $ を使用してプロパティを@Binding"value" というプロパティに渡し、テキスト フィールドに渡して最終的に変更できるところがいくつかあります。

私の目標は、このテキスト フィールドを編集し、編集が完了したら、これらの変更をコア データ ストアに保存できるようにすることです。

これは少し読みにくかったので、ここでコードを再現します。

struct MainScreen: View {
    @FetchRequest(entity: Item.entity(), sortDescriptors: [NSSortDescriptor(key: "itemName", ascending: true)]) var items: FetchedResults<Item>
    var body: some View {
        NavigationView {
            List {
                ForEach(items, id: \.self) { (item: Item) in
                    NavigationLink(destination: ItemDetail(item: item)) {
                        Text(item.itemName ?? "Unknown Item Name")
                    }
                } // ForEach
            }
        }
    } // body
} // MainScreen

struct ItemDetail: View {
    @ObservedObject var item: Item

    var body: some View {
        ItemPropertiesView(itemCost: $item.itemCost)
    }
}

struct ItemPropertiesView: View {
    @Binding var itemCost: String?

    var body: some View {
        LineItem(identifier: "Item Cost", value: $itemCost)
    }
}

struct LineItem: View {
    let identifier: String
    @Binding var value: String

    var body: some View {
        HStack {
            Text(identifier).bold() + Text(": ")
            TextField("Enter value",text: $value)
        }
    }
}

ItemDetail でエラーが発生します:「コンパイラは、妥当な時間内にこの式を型チェックできません。式を別個のサブ式に分割してみてください」

これは私が得ている唯一のエラーです。私は SwiftUI を初めて使用するので、すべてのフィードバックを歓迎します。

4

1 に答える 1