Was macht/ wozu dient das AppDelegate und das ViewController in Xcode/ Swift?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Das AppDelegate dient als eine zentrale Sammelstelle, um auf Programmzustände zu reagieren bzw. um eintreffende Nachrichten (Statusänderungen, Meldungen von außerhalb der App) zu delegieren. Eine AppDelegate-Instanz wird daher automatisch beim Programmstart erstellt.

Du kannst über ein AppDelegate beispielsweise Applikations-Setup-Code ausführen lassen (Vorbereiten von Szenen, Registrieren von Services, etc.) oder auf bestimmte Ereignisse (App wechselt in den Vorder-/Hintergrund, App wird geschlossen, u.ä.) reagieren. Scroll einfach einmal selbst durch die Methodenliste in der API Referenz, um einen einfachen Überblick zu bekommen.

Versuche nur nicht, jeglichen Code in so eine Klasse abzuladen, sondern teile dein Projekt trotzdem noch sinnvoll in unterschiedliche Teile (modular) auf. Das Delegate dient wie schon erwähnt vorrangig als Vermittler.

Beispiel:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
  var serviceRegister = ServiceRegister()
  serviceRegister.loadServices()

  return true
}

Sobald die App geladen wurde, sollen unterschiedliche Dienste (z.B. für Notification Pushes o.ä.) registriert werden. Statt dies jedoch in die Funktion zu schreiben, was die AppDelegate-Klasse vermutlich nur aufblähen würde, wird ein Objekt erstellt, welches sich dieser Aufgabe annimmt.

Ein ViewController wiederum ist ein Objekt, welches als Bindeglied zwischen View- und Model-Ebene agiert (vgl. mit dem Controller im MVC-Pattern oder dem ViewModel im MVVM-Pattern). Er erfüllt also Aufgaben wie das Laden und Ändern von Daten, die im View präsentiert werden und handhabt auch Ereignisse, die der Steuerung der App dienen (Beispiel: Navigation zwischen verschiedenen Szenen).

Jedem View ist ein ViewController zuordbar. Wenn ein View zu komplex wird, macht es Sinn, es in Subviews aufzuteilen, wobei wiederum jedes Subview seinen eigenen ViewController erhält.

Wenn du mit Design Patterns wie MVC oder MVVM noch nicht vertraut bist, würde ich dir raten, dich zunächst damit etwas zu beschäftigen. Eine Konzeptbeschreibung findest du auf Wikipedia. Ansonsten gibt es eine Vielzahl an Internetartikeln, die sich dem Thema, angewandt auf Swift, beschäftigen.

Beispiele: