Xamarin.Mac 開発者向けの macOS API
概要
Xamarin.Mac を使用して開発する時間の多くは、基になる Objective-C API をあまり気にすることなく、C# で考える、読む、記述することができます。 しかしながら、ときどき、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
は 2 番目のパラメーターとその型です。 最初のパラメーターの後のパラメーターの形式はすべて次のとおりです:selectorPart:(Type) paramName
- このメッセージ セレクターの完全な名前は次のとおりです:
canDragRowsWithIndexes:atPoint:
。 末尾の:
に注意してください。これは重要です。 - 実際の Xamarin.Mac C# バインディングは次のとおりです:
bool CanDragRows (NSIndexSet rowIndexes, PointF mouseDownPoint)
次のセレクター呼び出しも、同じように読むことができます。
[v canDragRowsWithIndexes:set atPoint:point];
- インスタンス
v
は、set
とpoint
という 2 つのパラメーターを渡してcanDragRowsWithIndexes:atPoint
セレクターが呼び出されるようにしています。 - C# では、このメソッド呼び出しは次のようになります:
v.CanDragRows (set, point);
特定のセレクターに対応する C# メンバーの検索
呼び出す必要がある Objective-C セレクターが見つかったら、次の手順はそれを同等の C# メンバーにマッピングすることです。 以下の 4 つの方法を試すことができます (引き続き NSTableView CanDragRows
の例を使用します)。
同じ名前のものがないか素早くスキャンするために、自動入力候補一覧を使用します。 ここではそれが
NSTableView
のインスタンスであることが分かっているので、以下のように入力します。NSTableView x;
x.
[リストが表示されない場合は ctrl+space)。CanDrag
[enter]- メソッドを右クリックし、宣言に移動して、
Export
属性を対象のセレクターと比較できるアセンブリ ブラウザーを開く
クラス バインディング全体を検索します。 ここではそれが
NSTableView
のインスタンスであることが分かっているので、以下のように入力します。NSTableView x;
NSTableView
を右クリックし、宣言からアセンブリ ブラウザーに移動する- 対象のセレクターを検索する
「Xamarin.Mac API オンライン ドキュメント」を使用できます。
Miguel は、特定の API を検索できる Xamarin.Mac API の "ロゼッタストーン" ビューをこちらで提供しています。 API が AppKit や macOS に固有のものではない場合は、ここでそれを見つけることができる場合があります。