Beste svaret
UIWindow er en klasse i UIKit, UI-rammeverket for iOS (og tvOS og watchOS).
Når du starter en app, er den vanlige prosessen for å vise noe å lage en UIWindow, opprette en UIViewController med visningen du vil vise, og sett deretter «root view controller» av UIWindow til UIViewController.
Hvis du lager en storyboard-basert app, gjøres dette for deg. Du kan stille inn «Hovedgrensesnittet», og den .storyboard-filen lastes inn som root view-kontroller. Du kan få tilgang til dette UIWindow i AppDelegate.
Hvis du ikke bruker storyboards, trenger du noe som dette stykke koden
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 didFinishLaunching-funksjonen til AppDelegate for å opprette UIWindow og sette rotvisnings-kontrolleren til at appen din skal gå. Merk at for å gjøre UIWindow synlig på skjermen, trenger du bare å sette den som synlig, i motsetning til å legge den til som en undervisning eller plassere den i et annet hierarki.
Vanligvis for å vise flere visningskontrollere andre enn root view-kontrolleren, kan du presentere dem modalt eller bruke en navigasjons- / fanekontroller, så det er ikke veldig mange grunner til å lage flere vinduer i appen din.
En årsak kan være å vise et varsel eller ha et varslingssystem i appen, der du vil vise et brukergrensesnittelement over alt annet i appen din (over til og med tastaturet og noen systemvarsler tror jeg).
Eller hvis appen din faktisk utnytter to skjermer (dvs. via AirPlay), må du opprette en ny UIWindow, stille skjermen til den sekundære skjermen, angi root view-kontrolleren og deretter sette den som synlig.
For å direkte adressere det andre spørsmålet ditt, antar jeg at du kunne legge til flere UIWindows som undervisninger av visningskontrollens syn (som UIWindow underklasser UIView), men det er absolutt ikke slik de vanligvis brukes, og jeg vet ikke helt hvordan det ville se ut.
Svar
For det første har UIWindow ingenting å gjøre med Swift. Det er ikke en del av det raske språket på noen måte form eller form. Det er en del av Apples UIKit-rammeverk, som for øyeblikket er standard UI-rammeverk for iOS (og som snart vil være standard UI-rammeverk for MacOS). UIViewController er også en del av UIKit.
En UIWindow inneholder appens brukergrensesnitt. Det er det som sender brukerinteraksjonshendelser til dine synspunkter. En typisk iOS-app har en enkelt UIWindow.
En UIViewController inneholder ikke noen UIWindow objekter og ville være en dårlig designbeslutning hvis den gjorde det.
Jeg anbefaler å lese dokumentasjonen: UIKit | Apple Developer Documentation