API macOS pour les développeurs Xamarin.Mac
Vue d’ensemble
Pendant la majeure partie de votre temps de développement avec Xamarin.Mac, vous pouvez penser, lire et écrire en C# sans trop vous soucier des API sous-jacentes Objective-C . Toutefois, vous devez parfois lire la documentation de l’API d’Apple, traduire une réponse de Stack Overflow en solution à votre problème ou comparer à un exemple existant.
Lire suffisamment Objective-C pour être dangereux
Parfois, il est nécessaire de lire une définition ou un Objective-C appel de méthode et de le traduire en méthode C# équivalente. Examinons une définition de Objective-C fonction et dé décomposer les éléments. Cette méthode (un sélecteur dans Objective-C) se trouve sur NSTableView
:
- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint
La déclaration peut être lue de gauche à droite :
- Le
-
préfixe signifie qu’il s’agit d’une méthode instance (non statique). + signifie qu’il s’agit d’une méthode de classe (statique) (BOOL)
est le type de retour (bool en C#)canDragRowsWithIndexes
est la première partie du nom.(NSIndexSet *)rowIndexes
est le premier paramètre et avec son type. Le premier paramètre est au format :(Type) paramName
atPoint:(NSPoint)mouseDownPoint
est le deuxième paramètre et son type. Chaque paramètre après le premier est le format :selectorPart:(Type) paramName
- Le nom complet de ce sélecteur de message est :
canDragRowsWithIndexes:atPoint:
. Notez le:
à la fin , c’est important. - La liaison C# Xamarin.Mac réelle est la suivante :
bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)
Cet appel de sélecteur peut être lu de la même façon :
[v canDragRowsWithIndexes:set atPoint:point];
- Le instance
v
a soncanDragRowsWithIndexes:atPoint
sélecteur appelé avec deux paramètres,set
etpoint
, passé. - En C#, l’appel de méthode ressemble à ceci :
v.CanDragRows (set, point);
Recherche du membre C# pour un sélecteur donné
Maintenant que vous avez trouvé le Objective-C sélecteur que vous devez appeler, l’étape suivante consiste à le mapper au membre C# équivalent. Vous pouvez essayer quatre approches (en continuant avec l’exemple NSTableView CanDragRows
) :
Utilisez la liste de saisie semi-automatique pour rechercher rapidement quelque chose du même nom. Comme nous savons qu’il s’agit d’un instance de
NSTableView
vous pouvez taper :NSTableView x;
x.
[ctrl+espace si la liste n’apparaît pas).CanDrag
[entrée]- Cliquez avec le bouton droit sur la méthode, accédez à la déclaration pour ouvrir l’Explorateur d’assemblys où vous pouvez comparer l’attribut
Export
au sélecteur en question
Recherchez l’intégralité de la liaison de classe. Comme nous savons qu’il s’agit d’un instance de
NSTableView
vous pouvez taper :NSTableView x;
- Cliquez avec le bouton droit sur
NSTableView
, accédez à la déclaration dans l’Explorateur d’assemblys - Rechercher le sélecteur en question
Vous pouvez utiliser la documentation en ligne de l’API Xamarin.Mac .
Miguel fournit ici une vue « Rosetta Stone » des API Xamarin.Mac que vous pouvez rechercher pour une API donnée. Si votre API n’est pas spécifique à AppKit ou macOS, vous pouvez la trouver ici.