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
):
Используйте список автозавершения, чтобы быстро сканировать то же имя. Так как мы знаем, что это экземпляр
NSTableView
, который можно ввести:NSTableView x;
x.
[CTRL+ПРОБЕЛ, если список не отображается).CanDrag
[ввод]- Щелкните метод правой кнопкой мыши, перейдите к объявлению, чтобы открыть браузер сборок, где можно сравнить
Export
атрибут с селектором, который имеется в вопросе
Выполните поиск по всей привязке класса. Так как мы знаем, что это экземпляр
NSTableView
, который можно ввести:NSTableView x;
- Щелкните правой кнопкой мыши
NSTableView
и перейдите к объявлению в браузере сборок - Поиск селектора в вопросе
Вы можете использовать онлайн-документацию по API Xamarin.Mac.
Miguel предоставляет представление API-интерфейсов Xamarin.Mac в Розетте Стоун, которое можно искать по заданному API. Если API не является приложением AppKit или macOS, его можно найти там.