Najlepsza odpowiedź
UIWindow to klasa w UIKit, frameworku UI dla iOS (oraz tvOS i watchOS).
Zwykłym procesem wyświetlania aplikacji podczas uruchamiania aplikacji jest utworzenie okna UIWindow, utworzenie UIViewController z widokiem, który chcesz wyświetlić, a następnie ustawienie „głównego kontrolera widoku” UIWindow na UIViewController.
Jeśli tworzysz aplikację opartą na scenorysach, zrobisz to za Ciebie. Możesz ustawić „Główny interfejs”, a plik .storyboard zostanie załadowany jako główny kontroler widoku. Możesz uzyskać dostęp do tego UIWindow w AppDelegate.
Jeśli nie używasz scenorysów, potrzebujesz czegoś takiego jak ten fragment kodu
var window: UIWindow?
func application(\_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let vc = CustomViewController()
window?.rootViewController = vc
window?.makeKeyAndVisible()
}
w funkcji didFinishLaunching AppDelegate, aby utworzyć UIWindow i ustawić jego główny kontroler widoku na swoją aplikację. Zwróć uwagę, że aby UIWindow było widoczne na ekranie, wystarczy ustawić je jako widoczne, a nie dodawać je jako widok podrzędny lub umieszczać w innej hierarchii.
Zwykle, aby wyświetlić więcej kontrolerów widoku, inne niż główny kontroler widoku, możesz przedstawić je modalnie lub użyć kontrolera nawigacji / kart, więc nie ma zbyt wielu powodów, aby tworzyć więcej okien w swojej aplikacji.
Jednym z powodów może być wyświetlenie alertu lub mieć system powiadomień w aplikacji, w którym chcesz wyświetlać element interfejsu użytkownika nad wszystkim innym w aplikacji (nawet nad klawiaturą i niektórymi alertami systemowymi, jak sądzę).
Lub jeśli Twoja aplikacja faktycznie korzysta z dwa ekrany (np. przez AirPlay), wtedy musiałbyś utworzyć nowe okno UIWindow, ustawić jego ekran na drugi ekran, ustawić jego główny kontroler widoku, a następnie ustawić go jako widoczny.
Aby bezpośrednio adresować Twoje drugie pytanie, przypuszczam, że mógłbyś dodać wiele okien interfejsu użytkownika jako podglądy widoku kontrolera widoku (jako UIWindow ma podklasę UIView), ale z pewnością nie jest to sposób, w jaki są zwykle używane, i naprawdę nie wiem, jak to by wyglądało.
Odpowiedź
Po pierwsze, UIWindow nie ma nic zrobić z Swiftem. To nie jest częścią języka Swift w żaden sposób ani w żadnej formie. Jest to część struktury UIKit firmy Apple, która jest obecnie domyślną strukturą interfejsu użytkownika dla systemu iOS (a wkrótce będzie domyślną strukturą interfejsu użytkownika dla systemu MacOS). UIViewController jest również częścią UIKit.
UIWindow zawiera interfejs użytkownika aplikacji. To właśnie przekazuje zdarzenia interakcji użytkownika do Twoich widoków. Typowa aplikacja na iOS ma jedno okno UIWindow.
UIViewController nie zawiera żadnego UIWindow i byłaby to zła decyzja projektowa, gdyby tak było.
Polecam przeczytanie dokumentacji: UIKit | Dokumentacja Apple Developer