在macOS中更改表中选定的行



我在macOS的CoreData应用程序中使用了Table

@FetchRequest(sortDescriptors: [NSSortDescriptor(key: "name", ascending: true)]) private var categories: FetchedResults<Categories>
@State private var selectedCategoryID: Categories.ID?

,我想知道我如何能捕获选定行的变化。如果我尝试。onchange()如下所示,那么由于错误,代码无法编译&不能调用非函数类型的值'Categories.ID?'(又名'Optional')">

Table(categories, selection: $selectedCategoryID) {
    TableColumn("Name", value .name!)
    TableColumn("Type", value: .type!)
}.onChange(of: selectedCategoryID {
    print("Selected row changed.")
}

谢谢。

我终于找到了根本原因。onchange()必须看起来像

.onChange(of: selectedCategoryID) { selected in
    print("Selected row is (selected)")
}

onChange是"触发副作用",例如不相关的东西。如果你想要更新一个相关的值,那么一个技巧就是将它移动到一个带有一些逻辑的结构体中,例如

struct TableConfig {
    var selectedCategoryID: CategoryID? {
        didSet {
            counter++
        }
    }
    var counter = 0
    mutating func reset() {
        selectedCategoryID = nil
        counter = 0
    }
}
...
@State var config = TableConfig()
...
Table(categories, selection: $config.selectedCategoryID)

相关内容

  • 没有找到相关文章

最新更新