API de macOS para desarrolladores de Xamarin.Mac

Información general

Durante gran parte del tiempo que ha desarrollado con Xamarin.Mac, puede pensar, leer y escribir en C# sin preocuparse por las Objective-C API subyacentes. Sin embargo, a veces tendrá que leer la documentación de la API de Apple, traducir una respuesta de Stack Overflow a una solución para el problema o compararla con un ejemplo existente.

Leer lo Objective-C suficiente como para ser peligroso

A veces será necesario leer una definición o una Objective-C llamada de método y traducirla al método de C# equivalente. Echemos un vistazo a una definición Objective-C de función y dividiremos las partes. Este método (un selector en ) se puede encontrar en NSTableView :

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

La declaración se puede leer de izquierda a derecha:

  • El - prefijo significa que es un método de instancia (no estático). + significa que es un método de clase (estático)
  • (BOOL) es el tipo de valor devuelto (bool en C#)
  • canDragRowsWithIndexes es la primera parte del nombre.
  • (NSIndexSet *)rowIndexes es el primer param y con su tipo. El primer parámetro tiene el formato: (Type) paramName
  • atPoint:(NSPoint)mouseDownPoint es el segundo param y su tipo. Cada parámetro después del primero es el formato: selectorPart:(Type) paramName
  • El nombre completo de este selector de mensajes es: canDragRowsWithIndexes:atPoint: . Tenga en : cuenta al final : es importante.
  • El enlace real de C# de Xamarin.Mac es: bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)

Esta invocación del selector se puede leer de la misma manera:

[v canDragRowsWithIndexes:set atPoint:point];
  • La instancia v tiene su selector llamado con dos canDragRowsWithIndexes:atPoint parámetros, y , setpoint pasados.
  • En C#, la invocación del método tiene el siguiente aspecto: v.CanDragRows (set, point);

Búsqueda del miembro de C# para un selector determinado

Ahora que ha encontrado el selector que necesita invocar, el Objective-C paso siguiente es asignarlo al miembro de C# equivalente. Hay cuatro enfoques que puede probar (continuando con el NSTableView CanDragRows ejemplo):

  1. Use la lista de finalización automática para buscar rápidamente algo del mismo nombre. Como sabemos que es una instancia de NSTableView , puede escribir:

    • NSTableView x;
    • x. [ctrl+espacio si no aparece la lista).
    • CanDrag [entrar]
    • Haga clic con el botón derecho en el método y vaya a la declaración para abrir el Explorador de ensamblados, donde puede comparar el Export atributo con el selector en cuestión.
  2. Busque todo el enlace de clase. Como sabemos que es una instancia de NSTableView , puede escribir:

    • NSTableView x;
    • Haga clic con el botón NSTableView derecho en , vaya a la declaración al Explorador de ensamblados.
    • Búsqueda del selector en cuestión
  3. Puede usar la documentación en línea de la API de Xamarin.Mac.

  4. Miguel proporciona una vista Rosetta de las API de Xamarin.Mac aquí en la que puede buscar una API determinada. Si la API no es específica de AppKit o macOS, es posible que la encuentre allí.