API для разработчиков Xamarin.Mac macOSmacOS APIs for Xamarin.Mac Developers

ОбзорOverview

Большую часть времени разработки с помощью Xamarin.Mac вы думаете, читать и писать на C# не столь важно, с помощью базовых интерфейсов Objective-C API.For much of your time developing with Xamarin.Mac, you can think, read, and write in C# without much concern with the underlying Objective-C APIs. Тем не менее иногда вы будет нужно прочитать документацию по API Apple, перевод ответ на Stack Overflow в решение для решения проблемы или сравнения в существующий образец.However, sometimes you’ll need to read the API documentation from Apple, translate an answer from Stack Overflow to a solution for your problem, or compare to an existing sample.

Чтение достаточно Objective-C опаснымиReading enough Objective-C to be dangerous

Иногда его будет необходимо прочитать определение Objective-C, или метод вызова и переводить, эквивалентного метода C#.Sometimes it will be necessary to read an Objective-C definition or method call and translate that to the equivalent C# method. Давайте взглянем на определение функции Objective-C и разбить на части.Let’s take a look at an Objective-C function definition and break down the pieces. Этот метод ( селектор в Objective-C) можно найти на NSTableView:This method (a selector in Objective-C) can be found on NSTableView:

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

Объявления могут считываться слева направо:The declaration can be read left to right:

  • - Префикс означает, что он является методом экземпляра (нестатическим).The - prefix means it is an instance (non-static) method. + означает, что он является методом класса (статический)+ means it is a class (static) method
  • (BOOL) — Это тип возвращаемого значения (логическое значение в C#)(BOOL) is the return type (bool in C#)
  • canDragRowsWithIndexes — Это первая часть имени.canDragRowsWithIndexes is the first part of the name.
  • (NSIndexSet *)rowIndexes — Это тип первого параметра и с ним относится к типу.(NSIndexSet *)rowIndexes is the first param and with it’s type. Первый параметр имеет формат: (Type) pararmNameThe first parameter is in the format: (Type) pararmName
  • atPoint:(NSPoint)mouseDownPoint — Тип второго параметра и его тип.atPoint:(NSPoint)mouseDownPoint is the second param and its type. Каждый параметр, после первого имеет формат: selectorPart:(Type) pararmNameEvery parameter after the first is the format: selectorPart:(Type) pararmName
  • — Полное имя этого сообщения селектор: canDragRowsWithIndexes:atPoint:.The full name of this message selector is: canDragRowsWithIndexes:atPoint:. Примечание : в конце - очень важно.Note the : at the end - it is important.
  • Фактическая привязка Xamarin.Mac C# является: bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)The actual Xamarin.Mac C# binding is: bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)

Этот вызов селектор можно прочитать так же, как:This selector invocation can be read the same way:

[v canDragRowsWithIndexes:set atPoint:point];
  • Экземпляр v испытывает его canDragRowsWithIndexes:atPoint селектора вызывается с двумя параметрами set и point, переданное в.The instance v is having its canDragRowsWithIndexes:atPoint selector called with two parameters, set and point, passed in.
  • В C# вызов метода выглядит следующим образом: x.CanDragRows (set, point);In C#, The method invocation looks like this: x.CanDragRows (set, point);

Поиск члена C# для данного селектораFinding the C# member for a given selector

Теперь, когда вы нашли селекторе Objective-C, который необходимо вызвать, следующим шагом является сопоставление, эквивалентный член C#.Now that you’ve found the Objective-C selector you need to invoke, the next step is mapping that to the equivalent C# member. Существует четыре подхода, можно попробовать (продолжением NSTableView CanDragRows пример):There are four approaches you can try (continuing with the NSTableView CanDragRows example):

  1. Используйте список автоматического завершения, можно быстро находить примерно таким же именем.Use the auto completion list to quickly scan for something of the same name. Так как мы знаем, что он является экземпляром класса NSTableView можно ввести:Since we know it is an instance of NSTableView you can type:

    • NSTableView x;
    • x. [ctrl + пробел, если список не отображается).x. [ctrl+space if the list does not appear).
    • CanDrag [ВВОД]CanDrag [enter]
    • Щелкните правой кнопкой мыши метод, перейти к объявлению, чтобы открыть обозреватель сборок, где вы можете сравнить Export для рассматриваемого селектор атрибутаRight-click the method, go to declaration to open the Assembly Browser where you can compare the Export attribute to the selector in question
  2. Поиск всего класса привязки.Search the entire class binding. Так как мы знаем, что он является экземпляром класса NSTableView можно ввести:Since we know it is an instance of NSTableView you can type:

    • NSTableView x;
    • Щелкните правой кнопкой мыши NSTableView, перейти к объявлению, чтобы обозреватель сборокRight-click NSTableView, go to declaration to Assembly Browser
    • Поиск для рассматриваемого селектораSearch for the selector in question
  3. Можно использовать электронной документации по Xamarin.Mac API .You can use the Xamarin.Mac API online documentation .

  4. Мигель обеспечивает представление «Розеттском камне» API-интерфейсы Xamarin.Mac здесь , которые можно найти через для заданного API.Miguel provides a "Rosetta Stone" view of the Xamarin.Mac APIs here that you can search through for a given API. Если API не AppKit или конкретных macOS, может оказаться существует.If your API is not AppKit or macOS specific, you may find it there.