Vergleicht man Frameworks in Objective-C und Swift

Die Master-Detail-Anwendungsvorlage verwendet einen Split-View-Controller in einigen Fällen und einen Navigation-Controller in anderen. Ursprünglich (das heißt, mit der Einführung des iPad), die Split-View-Controller wurde für iPad gedacht und die Navigations-Controller wurde für das iPhone gedacht. Im Jahr 2014, mit dem Aufkommen des iPhone 6 Plus, änderte sich die Umsetzung.

Die Split-View-Controller ist nun für größere Bildschirmgeräte verwendet, und die Navigationssteuerung wird für kleinere Bildschirmgeräte verwendet. Die Trennlinie ist nicht mehr iPad vs. iPhone: Es beginnt jetzt mit dem iPhone 6 Plus, die zusammen mit dem iPad eine Split-View-Controller verwendet. Andere iPhone-Modelle verwenden, um die Navigationssteuerung.

Dies hat eine Überarbeitung des Code verursacht, so dass selbst wenn Sie es seit Jahren verwendet haben, können Sie einen Blick auf den Code in diesem Abschnitt in beiden Sprachen zu nehmen.

Die Split-View-Controller eingerichtet ist, in AppDelegate (AppDelegate.swift oder die Kombination von AppDelegate.h und AppDelegate.m in Objective-C). Hier finden Sie die Erklärung und die Umsetzung sowohl in Swift und Objective-C. wiederholt mit Legacy-Objective-C-Frameworks Wie bereits erwähnt, werden Sie diesen Ansatz zu begegnen.

Die Ermittlung der Key-Verfahren

Der Schlüssel für den Split-View-Controller ist ein Protokoll - UISplitViewControllerDelegate. Innerhalb dieses Protokoll, eine der wichtigsten Methoden ist derjenige, der die Sekundär-View-Controller (die Master-Liste, in den meisten Fällen) managt kollabieren. Selbst unterscheidet sich der Name dieser Methode in den zwei Sprachen. In der Sprungbalken hier ist, wie es in Swift identifiziert wird:

splitViewController (_: collapseSecondaryViewController: ontoPrimaryViewController)

Hier ist, wie es in der Sprungbalken in Objective-C identifiziert wird:

-splitViewController: collapseSecondaryViewController: ontoPrimaryViewController:

Der erste Punkt zu bemerken ist, dass in Objective-C, die - am Anfang dieses identifiziert als Instanz Methode als zu einer Klassenmethode gegenüber. Dies kann in Swift, sondern nur auf eine andere Weise durchgeführt werden. Der Name der Methode in Swift spiegelt nicht seine Klassen- oder Instanz-ness.

Beachten Sie, dass Sie in der Dokumentation, die Objective-C-Version unter dem Titel aufgeführt ist. Im Anschluss daran die Swift und Objective-C-Schnittstellen werden gezeigt (in dieser Reihenfolge). Dieses Muster erscheint in allen der Rahmen folgen.

Vergleicht man Erklärungen

Die tatsächlichen Erklärungen für diese Methoden werden hier gezeigt. Erste Swift:

optional func splitViewController (_ splitViewController: UISplitViewController, collapseSecondaryViewControllersecondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool

Als nächstes wird die Objective-C-Deklaration:

- (BOOL) splitViewController: (UISplitViewController *)splitViewControllercollapseSecondaryViewController: (UIViewController *)secondaryViewControllerontoPrimaryViewController: (UIViewController *) primaryViewController

Nun, da Sie in den eigentlichen Code suchen, können Sie sehen, gibt es mehr Unterschiede als nur das -, dass dies als eine Instanz-Methode in Objective-C markiert. Hier sind die wichtigsten Unterschiede:

  • In Objective-C wird das Rückergebnis in Klammern bei der gezeigten # 173-Anfang der Funktion, wie in

    - (BOOL) splitViewController:
  • In Swift, wird das Rückergebnis am Ende der Funktion dargestellt ist, wie in

    -> Bool
  • In Objective-C werden die Parameter (außer dem ersten) in dieser Reihenfolge gezeigt: externen Namen, Dickdarm-, Typ (in Klammern und Sternchen), interne Name, wie in

    collapseSecondaryViewController: (UIViewController *)secondaryViewController 
  • In Swift sind die Parameter (einschließlich der ersten) in einer anderen Reihenfolge angezeigt: externen Namen, interne Name, Darm-, Typ, wie in

     collapseSecondaryViewController secondaryViewController: UIViewController!
  • Typen in Swift können, umfassen ! und ? als Postfix-Operatoren zu Abwickeln oder optional Status anzuzeigen. Darüber hinaus kann der externe Name durch einen Unterstrich fehlt und ersetzt werden, wie es in

_ SplitViewController: UISplitViewController

Menü