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
には、canDragRowsWithIndexes:atPoint
2 つのパラメーターset
とpoint
が渡された セレクターが呼び出されています。 - 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 には、Xamarin.Mac API の "Rosetta Stone" ビューが用意されています。 この ビューでは、特定の API を検索できます。 API が AppKit または macOS 固有でない場合は、そこに表示される場合があります。