次の方法で共有


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 は、setpoint という 2 つのパラメーターを渡して canDragRowsWithIndexes:atPoint セレクターが呼び出されるようにしています。
  • C# では、このメソッド呼び出しは次のようになります: v.CanDragRows (set, point);

特定のセレクターに対応する C# メンバーの検索

呼び出す必要がある Objective-C セレクターが見つかったら、次の手順はそれを同等の C# メンバーにマッピングすることです。 以下の 4 つの方法を試すことができます (引き続き NSTableView CanDragRows の例を使用します)。

  1. 同じ名前のものがないか素早くスキャンするために、自動入力候補一覧を使用します。 ここではそれが NSTableView のインスタンスであることが分かっているので、以下のように入力します。

    • NSTableView x;
    • x. [リストが表示されない場合は ctrl+space)。
    • CanDrag [enter]
    • メソッドを右クリックし、宣言に移動して、Export 属性を対象のセレクターと比較できるアセンブリ ブラウザーを開く
  2. クラス バインディング全体を検索します。 ここではそれが NSTableView のインスタンスであることが分かっているので、以下のように入力します。

    • NSTableView x;
    • NSTableView を右クリックし、宣言からアセンブリ ブラウザーに移動する
    • 対象のセレクターを検索する
  3. Xamarin.Mac API オンライン ドキュメント」を使用できます。

  4. Miguel は、特定の API を検索できる Xamarin.Mac API の "ロゼッタストーン" ビューをこちらで提供しています。 API が AppKit や macOS に固有のものではない場合は、ここでそれを見つけることができる場合があります。