Здесь возможен поэтапный подход (протестировано с Xcode 11.2 / iOS 13.2)
1) Добавьте класс AppSettings
для сохранения режима представлений, которые будут представлены в сокращении
class AppSettings: ObservableObject {
enum Mode {
case one
case two
}
@Published var mode: Mode? = nil
}
2) сделать appSettings
участником делегата сцены для доступа к нему и в ContentView
и в делегате ярлыка и передать его в ContentView
в качестве объекта среды
let appSettings = AppSettings()
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let contentView = ContentView().environmentObject(appSettings)
// ...
3) активировать соответствующий режим в сцене ярлыка делегат
func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
switch shortcutItem.type {
case "QuickAction1":
appSettings.mode = .one
break
case "QuickAction2":
appSettings.mode = .two
break
default:
break
}
}
4) Создание ContentView
условного представления ссылок в зависимости от выбранного режима быстрого доступа
struct ContentView: View {
@EnvironmentObject var appSettings: AppSettings
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: OneView(),
tag: AppSettings.Mode.one,
selection: $appSettings.mode)
{ Text("To One") }
NavigationLink(destination: TwoView(),
tag: AppSettings.Mode.two,
selection: $appSettings.mode)
{ Text("To Two") }
}
}
}
}