SwiftUI - Использование @main для установки rootViewController

При использовании SceneDelegate в SwiftUI можно было создать функцию, подобную приведенной ниже, которую можно было использовать для установки представления , как показано здесь. Однако в последней версии мы теперь используем WindowsGroup. Можно ли написать функцию, изменяющую представление в WindowsGroup?

func toContentView() {
   let contentView = ContentView()
      window?.rootViewController = UIHostingController(rootView: contentView)
}

person squarehippo10    schedule 29.09.2020    source источник
comment
Отвечает ли это на ваш вопрос stackoverflow.com/a/63276688/12299030?   -  person Asperi    schedule 29.09.2020
comment
Я думаю, что работа может быть выполнена, спасибо, но я очень надеюсь, что смогу разобраться в этом так же, как в примере.   -  person squarehippo10    schedule 30.09.2020


Ответы (1)


Вот возможный альтернативный подход, который фактически такой же, как и ваш старый toContentView

  1. вспомогательный класс
class Resetter: ObservableObject {
    static let shared = Resetter()

    @Published private(set) var contentID = UUID()

    func toContentView() {
        contentID = UUID()
    }
}
  1. содержание @main
    @StateObject var resetter = Resetter.shared
    var body: some Scene {
        WindowGroup {
            ContentView()
               .id(resetter.contentID)
        }
    }
  1. теперь из любой точки кода для сброса на ContentView вы можете просто позвонить
Resetter.shared.toContentView()
person Asperi    schedule 01.10.2020
comment
В итоге я пошел в другом направлении, но это похоже на то, что я пытался выяснить. Я уверен, что очень скоро это пригодится. Спасибо! - person squarehippo10; 01.10.2020