API macOS для разработчиков Xamarin.Mac

Обзор

На протяжении большей части времени разработки с помощью Xamarin.Mac вы можете думать, читать и писать в C# без каких-то проблем с базовыми Objective-C API. Однако иногда вам потребуется прочитать документацию по API из Apple, перевести ответ из Stack Overflow в решение для вашей проблемы или сравнить с существующим примером.

Чтение достаточно Objective-C опасно

Иногда необходимо прочитать Objective-C вызов определения или метода и перевести его в эквивалентный метод C#. Objective-C Рассмотрим определение функции и разбиим их. Этот метод ( селектор в Objective-C) можно найти в NSTableView:

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

Объявление можно прочитать слева направо:

  • Префикс - означает, что это метод экземпляра (нестатический). + означает, что это класс (статический) метод
  • (BOOL) — тип возвращаемого значения (bool в C#)
  • canDragRowsWithIndexes — первая часть имени.
  • (NSIndexSet *)rowIndexes — первый парам и с его типом. Первый параметр находится в формате: (Type) paramName
  • atPoint:(NSPoint)mouseDownPoint — второй парам и его тип. Каждый параметр после первого является форматом: selectorPart:(Type) paramName
  • Полное имя этого селектора сообщений: canDragRowsWithIndexes:atPoint: Обратите внимание на то, что : в конце концов важно.
  • Фактическая привязка Xamarin.Mac C#: bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)

Этот вызов селектора можно прочитать так же:

[v canDragRowsWithIndexes:set atPoint:point];
  • Экземпляр v вызывается с canDragRowsWithIndexes:atPoint двумя параметрами set и pointпередается.
  • В C#вызов метода выглядит следующим образом: v.CanDragRows (set, point);

Поиск элемента C# для заданного селектора

Теперь, когда вы нашли Objective-C селектор, который необходимо вызвать, следующий шаг — сопоставление с эквивалентным элементом C#. Существует четыре подхода, которые можно попробовать (продолжая с примером NSTableView CanDragRows ):

  1. Используйте список автозавершения, чтобы быстро сканировать то же имя. Так как мы знаем, что это экземпляр NSTableView , который можно ввести:

    • NSTableView x;
    • x. [CTRL+ПРОБЕЛ, если список не отображается).
    • CanDrag [ввод]
    • Щелкните метод правой кнопкой мыши, перейдите к объявлению, чтобы открыть браузер сборок, где можно сравнить Export атрибут с селектором, который имеется в вопросе
  2. Выполните поиск по всей привязке класса. Так как мы знаем, что это экземпляр NSTableView , который можно ввести:

    • NSTableView x;
    • Щелкните правой кнопкой мыши NSTableViewи перейдите к объявлению в браузере сборок
    • Поиск селектора в вопросе
  3. Вы можете использовать онлайн-документацию по API Xamarin.Mac.

  4. Miguel предоставляет представление API-интерфейсов Xamarin.Mac в Розетте Стоун, которое можно искать по заданному API. Если API не является приложением AppKit или macOS, его можно найти там.