Risposta migliore
UIWindow è una classe in UIKit, il framework dellinterfaccia utente per iOS (e tvOS e watchOS).
Quando avvii unapp, il normale processo per visualizzare qualcosa è creare una UIWindow, creare un UIViewController con la vista che desideri visualizzare, quindi impostare il “controller della vista principale” della UIWindow su UIViewController.
Se stai creando unapp basata su storyboard, questo è fatto per te. È possibile impostare l “interfaccia principale” e il file .storyboard verrà caricato come controller di visualizzazione principale. Puoi accedere a questa finestra dellinterfaccia utente in AppDelegate.
Se non stai utilizzando gli storyboard, hai bisogno di qualcosa come questo pezzo di codice
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()
}
nella funzione didFinishLaunching di AppDelegate per creare la UIWindow e impostare il suo controller di visualizzazione principale per la tua app in corso. Nota che per rendere la UIWindow visibile sullo schermo, devi solo impostarla come visibile, invece di aggiungerla come sottoview o posizionarla in qualche altra gerarchia.
Di solito per mostrare più controller di visualizzazione altri rispetto al controller di visualizzazione principale, puoi presentarli in modo modale o utilizzare un controller di navigazione / scheda, quindi non ci sono davvero molti motivi per creare più finestre nella tua app.
Uno dei motivi potrebbe essere mostrare un avviso o avere un sistema di notifica in-app, in cui desideri mostrare un elemento dellinterfaccia utente sopra ogni altra cosa nella tua app (sopra anche la tastiera e alcuni avvisi di sistema credo).
O se la tua app ne trae effettivamente vantaggio due schermate (es. tramite AirPlay), quindi dovresti creare una nuova UIWindow, impostare il suo schermo su quello dello schermo secondario, impostare il suo controller di visualizzazione principale, quindi impostarlo come visibile.
Per indirizzare direttamente la tua seconda domanda, suppongo che potresti aggiungere più finestre UI come viste secondarie della vista di un controller di visualizzazione (come UIWindow fa una sottoclasse UIView), ma non è certamente il modo in cui vengono usati di solito e non so davvero come sarebbe.
Risposta
Prima di tutto, UIWindow non ha nulla a che fare con Swift. Non fa parte del linguaggio Swift in alcun modo o forma. Fa parte del framework UIKit di Apple, che è attualmente il framework UI predefinito per iOS (e che presto diventerà il framework UI predefinito per MacOS). Anche UIViewController fa parte di UIKit.
Una UIWindow è ciò che contiene linterfaccia utente della tua app. È ciò che invia gli eventi di interazione dellutente alle tue visualizzazioni. Una tipica app iOS ha una singola UIWindow.
Un UIViewController non contiene qualsiasi UIWindow oggetti e sarebbe una cattiva decisione di progettazione se lo facesse.
Consiglio di leggere la documentazione: UIKit | Documentazione per sviluppatori Apple