Comparando Frameworks em Objective-C e Swift

O modelo de aplicativo Master-Detail utiliza um controlador de split-view em alguns casos e um controlador de navegação em outros. Originalmente (isto é, com o lançamento do iPad), o controlador de split-view foi destinado para iPad, eo controlador de navegação foi destinado para iPhone. Em 2014, com o advento do iPhone 6 Além disso, a implementação alterado.

O controlador de split-view agora é usado para dispositivos de tela maior e o controlador de navegação é utilizado para dispositivos de tela menores. A linha divisória não é mais iPad vs iPhone: Agora começa com iPhone 6 Plus, que utiliza um controlador de split-view, juntamente com iPad. Outros modelos de iPhone usam o controlador de navegação.

Isto tem causado uma revisão ao código, por isso mesmo se você já usou-o durante anos, você deve dar uma olhada no código nesta seção em ambas as línguas.

O controlador de exibição de divisão é criada em AppDelegate (AppDelegate.swift ou a combinação de AppDelegate.h e AppDelegate.m em Objective-C). Aqui, você vê a declaração e a implementação, tanto Swift e Objective-C. Como se observa, você encontrará esta abordagem repetidamente com estruturas legadas Objective-C.

Identificar o método de chave

A chave para o controlador de split-view é um protocolo - UISplitViewControllerDelegate. Dentro desse protocolo, um dos métodos mais importantes é aquele que administra o colapso do controlador de vista secundário (a lista principal, na maioria dos casos). Até o nome do presente método difere nos dois idiomas. Na barra de salto, aqui é como ela é identificada na Swift:

splitViewController (_: collapseSecondaryViewController: ontoPrimaryViewController)

Aqui está como ele é identificado na barra de salto em Objective-C:

-splitViewController: collapseSecondaryViewController: ontoPrimaryViewController:

O primeiro ponto a notar é que, em Objective-C, o - no início identifica isso como um método de instância em oposição a um método de classe. Isto pode ser feito em Swift, mas apenas de uma maneira diferente. O nome do método em Swift não reflete a sua aula ou instância-ness.

Note-se que na documentação, a versão Objective-C é listado pelo título. Depois disso, a Swift e interfaces de Objective-C são mostrados (nessa ordem). Este padrão parece ser seguido em todos os quadros.

comparando declarações

As declarações reais para esses métodos são mostrados aqui. Primeiro Swift:

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

Em seguida, a declaração Objective-C:

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

Agora que você está olhando para o código real, você pode ver, existem mais diferenças do que apenas o - que marca este como um método de instância em Objective-C. Aqui estão as principais diferenças:

  • Em Objective-C, o resultado de retorno é mostrada entre parênteses no # 173-início da função, tal como no

    - (BOOL) splitViewController:
  • Em Swift, o resultado de retorno é mostrado no final da função, tal como no

    -> Bool
  • Em Objective-C, os parâmetros (exceto a primeira) são mostrados na seguinte ordem: nome externo, cólon, tipo (entre parêntesis e asterisco), nome interno, como no

    collapseSecondaryViewController: (UIViewController *)secondaryViewController 
  • Em Swift, os parâmetros (incluindo a primeira) são mostrados numa ordem diferente: nome externo, nome interno, do cólon, do tipo, como nas

     collapseSecondaryViewController secondaryViewController: UIViewController!
  • Tipos de Swift pode incluir ! e ? como operadores postfix para indicar desembrulhar ou o status opcional. Além disso, o nome externo pode estar faltando e substituído por um sublinhado, como em

_ SplitViewController: UISplitViewController

menu