Comparaison des cadres en Objective-C et rapide

Le modèle d'application maître-détail utilise un contrôleur split-vue dans certains cas et un contrôleur de la navigation dans d'autres. A l'origine (qui est, avec le lancement de l'iPad), le contrôleur split-vue a été conçu pour l'iPad, et le contrôleur de navigation a été conçu pour iPhone. En 2014, avec l'avènement de l'iPhone 6 Plus, la mise en œuvre a changé.

Sommaire

Le contrôleur split-vue est maintenant utilisé pour les appareils à grand écran et le contrôleur de navigation est utilisé pour les écrans plus petits. La ligne de démarcation est plus iPad vs iPhone: Il commence maintenant avec l'iPhone 6 Plus, qui utilise un contrôleur split-vue avec iPad. Autres modèles d'iPhone utilisent le contrôleur de navigation.

Cela a provoqué une révision du code, de sorte que même si vous avez utilisé pendant des années, vous devriez jeter un oeil sur le code dans cette section dans les deux langues.

Le contrôleur de vue fractionnée est définie dans AppDelegate (AppDelegate.swift ou la combinaison de AppDelegate.h et AppDelegate.m en Objective-C). Ici, vous voyez la déclaration et la mise en œuvre à la fois dans Swift et Objective-C. Comme indiqué, vous rencontrerez cette approche à plusieurs reprises avec les cadres hérités Objective-C.

L'identification de la méthode clé

La clé de la commande split-vue est un protocole - UISplitViewControllerDelegate. Dans ce protocole, une des méthodes les plus importantes est celle qui gère l'effondrement du contrôleur de vue secondaire (la liste principale, dans la plupart des cas). Même le nom de cette méthode diffère dans les deux langues. Dans la barre de saut, voici comment elle est identifiée dans Swift:

splitViewController (_: collapseSecondaryViewController: ontoPrimaryViewController)

Voici comment elle est identifiée dans la barre de saut en Objective-C:

-splitViewController: collapseSecondaryViewController: ontoPrimaryViewController:



Le premier point à noter est que en Objective-C, le - au début identifie comme une méthode d'instance, par opposition à une méthode de classe. Cela peut être fait en Swift, mais seulement d'une manière différente. Le nom de la méthode à Swift ne reflète pas son de classe ou d'instance-ness.

Notez que dans la documentation, la version Objective-C est répertorié par le titre. Suite à cela, la Swift et interfaces Objective-C sont présentés (dans cet ordre). Cette tendance semble être suivie dans tous les cadres.

En comparant les déclarations

Les déclarations réelles pour ces méthodes sont présentés ici. Première Swift:

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

Ensuite, la déclaration Objective-C:

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

Maintenant que vous êtes à la recherche au code réel, vous pouvez voir qu'il ya plus de différences que juste le - qui marque cela comme une méthode d'instance en Objective-C. Voici les principales différences:

  • En Objective-C, le résultat de retour est indiqué entre parenthèses à la N ° 173-début de la fonction, comme dans

    - (BOOL) splitViewController:
  • En Swift, le résultat obtenu est représenté à la fin de la fonction, comme dans

    -> Bool
  • En Objective-C, les paramètres (sauf le premier) sont présentés dans cet ordre: nom externe, du côlon, de type (entre parenthèses et astérisque), nom interne, comme dans

    collapseSecondaryViewController: (UIViewController *)secondaryViewController 
  • Dans Swift, les paramètres (y compris le premier) sont présentés dans un ordre différent: nom externe, nom interne, du côlon, de type, comme dans

     collapseSecondaryViewController secondaryViewController: UIViewController!
  • Types de Swift peuvent inclure ! et ? comme opérateurs de suffixe pour indiquer déballage ou le statut en option. En outre, le nom externe peut être disparu et remplacé par un trait de soulignement, comme dans

_ SplitViewController: UISplitViewController

» » » » Comparaison des cadres en Objective-C et rapide