Comparando os quadros em objective-c e rápida
O modelo de aplicativo Master-Detail utiliza um controlador de divisão de exibição 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 Plus, a implementação alterado.
Conteúdo
O controlador de divisão de exibição agora é usada para dispositivos de tela maior e o controlador de navegação é usada para dispositivos de tela menores. A linha divisória não é mais iPad vs iPhone: Agora começa com iPhone 6 Plus, que usa um controlador de divisão de exibição junto com iPad. Outros modelos de iPhone usam o controlador de navegação.
Isto tem causado uma revisão do código, por isso mesmo que você usou 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 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 divisão de exibição é um protocolo - UISplitViewControllerDelegate. Dentro deste protocolo, um dos métodos mais importantes é aquele que gere o colapso do controlador de exibição secundária (a lista principal, na maioria dos casos). Até mesmo o nome desse método difere nas duas línguas. Na barra de salto, aqui é como ele é identificado em 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 este como um método de exemplo, em oposição a um método de classe. Isso pode ser feito em Swift, mas apenas de uma forma 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, o Swift e interfaces de Objective-C são mostrados (por essa ordem). Esse padrão parece ser seguido em todos os quadros.
Video: Objective C Tutorial
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) - gt;! Bool
Em seguida, a declaração Objective-C:
Video: Max Tagher - Calling Objective-C at Runtime
- (BOOL) splitViewController: (UISplitViewController *)splitViewControllercollapseSecondaryViewController: (UIViewController *)secondaryViewControllerontoPrimaryViewController: (UIViewController *) primaryViewController
Agora que você está olhando para o código real, que 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 é apresentada dentro de parênteses no 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
-gt; Bool
Em Objective-C, os parâmetros (excepto o primeiro) são mostrados na seguinte ordem: nome externo, cólon, tipo (em 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 em
collapseSecondaryViewController secondaryViewController: UIViewController!
Tipos em Swift pode incluir ! e ? como operadores postfix para indicar desembrulhar ou o status opcional. Além disso, o nome externo pode estar ausente e substituído por um sublinhado, como em
_ SplitViewController: UISplitViewController