Bästa svaret
UIWindow är en klass i UIKit, UI-ramverket för iOS (och tvOS och watchOS).
När du startar en app är den vanliga processen att visa något att skapa ett UIWindow, skapa en UIViewController med den vy du vill visa och ställ sedan in ”root view controller” för UIWindow till UIViewController.
Om du skapar en storyboard-baserad app görs detta åt dig. Du kan ställa in ”Huvudgränssnittet” och den .storyboard-filen kommer att laddas in som root view controller. Du kan komma åt detta UIWindow i AppDelegate.
Om du inte använder storyboards behöver du något liknande den här biten kod
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()
}
i funktionen DidFinishLaunching i AppDelegate för att skapa UIWindow och ställa in dess rotvyskontroll till din app igång. Observera att för att göra UIWindow synligt på skärmen behöver du bara ställa in det som synligt, i motsats till att lägga till det som en undervy eller placera det i någon annan hierarki.
Vanligtvis för att visa fler visningskontrollanter andra än root view-styrenheten kan du presentera dem modalt eller använda en navigations- / flikregulator, så det finns inte riktigt många anledningar att skapa fler fönster i din app.
En anledning kan vara att visa en varning eller ha ett meddelandesystem i appen, där du vill visa ett gränssnittselement ovanför allt annat i din app (över till och med tangentbordet och vissa systemvarningar tror jag).
Eller om din app faktiskt drar nytta av två skärmar (dvs. via AirPlay), då skulle du behöva skapa en ny UIWindow, ställa in skärmen på den sekundära skärmen, ställa in dess rotvyskontroll och sedan ställa in den som synlig.
För att direkt adressera din andra fråga, jag antar att du kan lägga till flera UIWindows som undervyer av en visningsstyrares vy (som UIWindow underklassar UIView), men det är verkligen inte hur de vanligtvis används, och jag vet inte riktigt hur det skulle se ut.
Svar
För det första har UIWindow ingenting att göra med Swift. Det är inte en del av det snabba språket på något sätt. Det är en del av Apples UIKit-ramverk, som för närvarande är standardgränssnittsramen för iOS (och som snart kommer att vara standardgränssnittsramverket för MacOS). UIViewController är också en del av UIKit.
En UIWindow är det som innehåller appens användargränssnitt. Det är det som skickar användarinteraktionshändelser till dina åsikter. En typisk iOS-app har en enda UIWindow.
En UIViewController innehåller inte någon UIWindow objekt och skulle vara ett dåligt designbeslut om det gjorde det.
Jag rekommenderar att du läser dokumentationen: UIKit | Apples utvecklardokumentation