5

私はObjective-Cを初めて使用します。IDをオブジェクトインスタンス(合成されたプロパティを持つ)に設定し、次のようなプロパティを直接取得/設定する簡単な方法があるかどうか疑問に思っています。

id myID = myInstance;

myID.myProperty = something;

myInstance は、myProperty という名前の合成プロパティを持つオブジェクトです。私がするとき:

myInstance.myProperty = something;

動作しますが、IDに切り替えるとエラーが発生します

タイプ「_strong id」のオブジェクトにプロパティ「myProperty」が見つかりません

ID を使用する場合、合成を使用する代わりにゲッター/セッター メソッドを手動で作成する必要がありますか? 私はidにインスタンスメソッドを実行させることができるように見えるからです。

4

2 に答える 2

9

オブジェクトが typeでなければならないid場合は、 (ドット表記ではなく) メッセージを使用して getter/setter にアクセスできます。

id myID = ...;
NSString *prop = [myID property];
[myID setProperty:@"new value"];

しかし、より良い選択肢があります:

新しい変数の宣言

オブジェクトのクラスがわかっている場合は、その型の変数を作成してください。

id myID; // defined elsewhere
MyClass *obj = (MyClass *)myID; // if you know the class, make a variable with that type
obj.property = @"new value";

鋳造

インライン キャストを使用して、新しい変数を作成せずに型をコンパイラに伝えます。

id myID; // defined elsewhere
((MyClass *)myID).property = @"new value";

プロトコル

オブジェクトの正確なクラスがわからないが、特定のメソッドを実装する必要があることがわかっている場合は、プロトコルを作成できます。

id<MyProtocol> myID; // the compiler knows the object implements MyProtocol
myID.property = @"new value";
于 2012-04-19T12:12:54.003 に答える
1

プロパティには、単純なメッセージに関してより多くの情報が必要です。答えは.. id オブジェクトのプロパティを呼び出すことはできません。ただし、メッセージ、キャスト (よくわからない場合は、リフレクションを使用してオブジェクトの種類を調べてください)、プロトコルなどを使用できます。

于 2012-04-19T12:14:22.627 に答える