APIs do macOS para desenvolvedores do Xamarin.Mac

Visão geral

Durante grande parte do seu tempo desenvolvendo com o Xamarin.Mac, você pode pensar, ler e escrever em C# sem muita preocupação com as APIs subjacentes Objective-C . No entanto, às vezes, você precisará ler a documentação da API da Apple, traduzir uma resposta do Stack Overflow para uma solução para o problema ou comparar com um exemplo existente.

Ler o suficiente Objective-C para ser perigoso

Às vezes, será necessário ler uma Objective-C definição ou chamada de método e traduzi-la para o método C# equivalente. Vamos dar uma olhada em uma Objective-C definição de função e dividir as partes. Esse método (um seletor em Objective-C) pode ser encontrado em NSTableView:

- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint

A declaração pode ser lida da esquerda para a direita:

  • O - prefixo significa que é um método de instância (não estático). + significa que é um método de classe (estático)
  • (BOOL) é o tipo de retorno (bool em C#)
  • canDragRowsWithIndexes é a primeira parte do nome.
  • (NSIndexSet *)rowIndexes é o primeiro parâmetro e com seu tipo. O primeiro parâmetro está no formato: (Type) paramName
  • atPoint:(NSPoint)mouseDownPoint é o segundo parâmetro e seu tipo. Cada parâmetro após o primeiro é o formato: selectorPart:(Type) paramName
  • O nome completo deste seletor de mensagem é: canDragRowsWithIndexes:atPoint:. Observe o : no final – é importante.
  • A associação real do Xamarin.Mac C# é: bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)

Essa invocação de seletor pode ser lida da mesma maneira:

[v canDragRowsWithIndexes:set atPoint:point];
  • A instância v está tendo seu canDragRowsWithIndexes:atPoint seletor chamado com dois parâmetros, set e point, passados.
  • Em C#, a invocação do método tem esta aparência: v.CanDragRows (set, point);

Localizando o membro C# para um determinado seletor

Agora que você encontrou o Objective-C seletor que precisa invocar, a próxima etapa é mapeá-lo para o membro C# equivalente. Há quatro abordagens que você pode tentar (continuando com o NSTableView CanDragRows exemplo):

  1. Use a lista de preenchimento automático para verificar rapidamente algo com o mesmo nome. Como sabemos que é uma instância de, NSTableView você pode digitar:

    • NSTableView x;
    • x. [ctrl+espaço se a lista não aparecer).
    • CanDrag [enter]
    • Clique com o botão direito do mouse no método , vá para a declaração para abrir o Assembly Browser em que você pode comparar o Export atributo com o seletor em questão
  2. Pesquise toda a associação de classe. Como sabemos que é uma instância de, NSTableView você pode digitar:

    • NSTableView x;
    • Clique com o botão direito do mouse NSTableViewem , vá para declaração para Navegador de Assembly
    • Pesquisar o seletor em questão
  3. Você pode usar a documentação online da API Xamarin.Mac .

  4. Miguel fornece uma exibição "Rosetta Stone" das APIs do Xamarin.Mac aqui que você pode pesquisar uma determinada API. Se sua API não for específica do AppKit ou do macOS, você poderá encontrá-la lá.