API macOS per sviluppatori Xamarin.Mac

Panoramica

Per gran parte del tempo che si sviluppa con Xamarin.Mac, è possibile pensare, leggere e scrivere in C# senza preoccuparsi delle API sottostanti Objective-C . Tuttavia, a volte è necessario leggere la documentazione dell'API da Apple, tradurre una risposta da Stack Overflow in una soluzione per il problema o confrontare con un esempio esistente.

Leggere abbastanza Objective-C per essere pericoloso

A volte sarà necessario leggere una definizione o una Objective-C chiamata al metodo e convertirla nel metodo C# equivalente. Si esaminerà ora una Objective-C definizione di funzione e si suddivideno le parti. Questo metodo (un selettore in ) è reperibile in Objective-CNSTableView:

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

La dichiarazione può essere letta da sinistra a destra:

  • Il - prefisso indica che è un metodo di istanza (non statico). + significa che è un metodo di classe (statico)
  • (BOOL) è il tipo restituito (bool in C#)
  • canDragRowsWithIndexes è la prima parte del nome.
  • (NSIndexSet *)rowIndexes è il primo parametro e con il tipo. Il primo parametro è nel formato: (Type) paramName
  • atPoint:(NSPoint)mouseDownPoint è il secondo parametro e il relativo tipo. Ogni parametro dopo il primo è il formato: selectorPart:(Type) paramName
  • Il nome completo del selettore di messaggi è: canDragRowsWithIndexes:atPoint:. Si noti che alla : fine è importante.
  • L'associazione effettiva di Xamarin.Mac C# è: bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)

Questa chiamata del selettore può essere letta nello stesso modo:

[v canDragRowsWithIndexes:set atPoint:point];
  • L'istanza v ha il selettore canDragRowsWithIndexes:atPoint chiamato con due parametri e setpoint, passato.
  • In C# la chiamata al metodo è simile alla seguente: v.CanDragRows (set, point);

Ricerca del membro C# per un selettore specificato

Dopo aver trovato il Objective-C selettore da richiamare, il passaggio successivo consiste nel mapping al membro C# equivalente. Esistono quattro approcci che è possibile provare (continuando con l'esempio NSTableView CanDragRows ):

  1. Usare l'elenco di completamento automatico per cercare rapidamente qualcosa dello stesso nome. Poiché si sa che si tratta di un'istanza di NSTableView è possibile digitare:

    • NSTableView x;
    • x. [CTRL+SPAZIO se l'elenco non viene visualizzato).
    • CanDrag [invio]
    • Fare clic con il pulsante destro del mouse sul metodo, passare alla dichiarazione per aprire il Visualizzatore assembly in cui è possibile confrontare l'attributo Export con il selettore in questione
  2. Cercare l'intera associazione di classi. Poiché si sa che si tratta di un'istanza di NSTableView è possibile digitare:

    • NSTableView x;
    • Fare clic con il pulsante destro del mouse su NSTableView, passare alla dichiarazione in Assembly Browser
    • Cercare il selettore in questione
  3. È possibile usare la documentazione online dell'API Xamarin.Mac.

  4. Miguel offre una visualizzazione "Rosetta Stone" delle API Xamarin.Mac qui che è possibile cercare un'API specifica. Se l'API non è specifica di AppKit o macOS, è possibile trovarla lì.