适用于 Xamarin.Mac 开发人员的 macOS API

概述

在很多时候使用 Xamarin.Mac 进行开发时,可以用 C# 思考、阅读和编写,而不必担心基础 Objective-C API。 但有时你需要阅读 Apple 的 API 文档,将 Stack Overflow 的答案转换为相关问题的解决方案,或与现有示例进行比较。

读取足够的 Objective-C 是存在风险的

有时需要读取 Objective-C 定义或方法调用,并将其转换为等效的 C# 方法。 让我们看一下 Objective-C 函数定义并分解这些部分。 此方法(Objective-C 中的选择器)可在 NSTableView 中找到:

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

声明可以从左到右读取:

  • 前缀 - 表示它是实例(非静态)方法。 + 表示它是类(静态)方法
  • (BOOL) 是返回类型(C# 中的 bool)
  • 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 使用传入的两个参数(setpoint)调用其 canDragRowsWithIndexes:atPoint 选择器。
  • 在 C# 中,方法调用如下所示:v.CanDragRows (set, point);

查找给定选择器的 C# 成员

找到需要调用的 Objective-C 选择器后,下一步就是将它映射到等效的 C# 成员。 有四种方法可以尝试(继续 NSTableView CanDragRows 示例):

  1. 使用自动完成列表快速扫描同名的内容。 由于我们知道它是一个可以键入的 NSTableView 实例:

    • NSTableView x;
    • x. [如果列表未显示,则按 Ctrl+空格键)。
    • CanDrag [按 Enter 键]
    • 右键单击该方法,转到声明以打开程序集浏览器,可在其中将 Export 属性与相关的选择器进行比较
  2. 搜索整个类绑定。 由于我们知道它是一个可以键入的 NSTableView 实例:

    • NSTableView x;
    • 右键单击 NSTableView,转到程序集浏览器的声明
    • 搜索相关选择器
  3. 可以使用 Xamarin.Mac API 联机文档

  4. Miguel 在此处提供了 Xamarin.Mac API 的“Rosetta Stone”视图,你可以在其中搜索给定的 API。 如果 API 不特定于 AppKit 或 macOS,你可能会在此处找到它。