これを何度も見てきましたが、私は問題を見ることができません。おそらく明らかで、おそらく私はばかだと思うので、事前にお詫びします。私が持っている私のインターフェイスでなぜ私の客観的なメソッドは私に「エラー:メソッドのパラメータとしてオブジェクトを使用できないのですか」と伝えます
:バティ私を駆動する事がクラスメソッドということです
@implentation... + (NSString)getName:(PolygonShape *) polyshape { // here is where I get the "error: can not use an object as parameter to a method" int sides = [polyshape numberOfSides]; NSString * s = [NSString init]; switch (sides) { case 3: s = "@Triangle"; // there's also an "assignment from incompatible pointer type" warning...but its secondary break; case 4: return "@Square"; break; default: break; } }
:私はエラーを取得する実装で
@interface PolygonShape : NSObject { int numberOfSides; int minimumNumberOfSides; int maximumNumberOfSides; } @property int numberOfSides, minimumNumberOfSides, maximumNumberOfSides; // class methods + (float)getAngleInDegrees:(PolygonShape *) polyshape; + (float)getAngleInRadians:(PolygonShape *) polyshape; + (NSString)getName:(PolygonShape *) polyshape; //instance methods - (id)init; - (id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max; @end
一部をgetNameメソッドのためにされます
+ (float)getAngleInDegrees:(PolygonShape *) polyshape;
+ (float)getAngleInRadians:(PolygonShape *) polyshape;
initはインスタンスメソッドであり、クラスメソッドではありません。あなたはクラスにallocを送信してインスタンスを作成し、その新しいインスタンスにinitを送信する必要があります。したがって:[[NSString alloc] init]。また、変数を使用していないので、s変数はまったく必要ありません。その後、ケース3の割り当てをケース4のケースのようなreturnステートメントに置き換えることができます。 –
ありがとうピーター - あなたは絶対に正しいです。 [NSString new]を使うのは意味があるかもしれませんが、それは私が読んだことから落胆しているようです。 – user102288