Если вы хотите отправить действие по цепочке респондента, вы можете использовать метод -[NSApplication sendAction:to:from:]
, передавая для цели nil
.
Это можно сделать, есливы хотите работать с цепочкой респондента AppKit, которая может включать ваш SwiftUI NSHostingView
вместе с остальной цепочкой респондента (его суперпредставления, окно и т. д.).Теоретически, если вы хотите обработать действие на основе селектора из содержимого SwiftUI, вы можете использовать модификатор onCommand
для распознавания Command
обертывания этого селектора.Однако ваш NSHostingView
должен быть в цепочке респондента AppKit, а представление onCommand
SwiftUI должно быть сфокусировано (или предком сфокусированного представления) для распознавания команды.Основным преимуществом этого является то, что вы также можете обрабатывать действия меню, используя точно такой же код, поскольку действия меню обычно отправляются через цепочку респондента.
Если вы пытаетесь изменить состояние, связанное с некоторым другим представлением SwiftUI,может быть проще передать Binding
или параметр замыкания в структуру представления в качестве аргумента его инициализатору.Например, вы можете сохранить какое-то состояние где-то еще (например, «набор выбранных объектов»), а затем передать закрытие кнопке, которая изменяет состояние («поместить каждый объект в набор выбранных объектов») без необходимости непосредственного обучениякнопка об этом состоянии.