0

実行時にチェックするクラスのタイプが設定されていることを確認し、それをメソッドから渡したい場合はどうすればよいですか? これは機能しますか?

-(int)findObjectOfTypeClass:(id)classType container:(SPSprite*)sp
{

    for (int i=0; i<sp.numChildren; i++) {

        if([[sp childAtIndex:i] isKindOfClass:[classType class]])
        {
            return i;
        }
    }
    return -1;

}

そのメソッドはどのように呼び出されますか? このような?

[self findObjectOfTypeClass:NSObject container: mySprite];

?

特定のタイプのオブジェクトがあるかどうかを確認するために、mutableArray (mySprite) をチェックしたいと考えています。したがって、実際のオブジェクトを渡したくありません。NSObject、SPSprite などのクラスの型を渡したいので、isKindOfClass を使用して、配列にそのクラス型のオブジェクトがあるかどうかを確認します。

4

2 に答える 2

3

あなたが持っているようにメソッドを定義することで、あなたが言うように呼び出すことができます:

[self findObjectOfTypeClass:NSObject container: mySprite];

それ自体を渡すのは少し奇妙ですNSObjectが、クラス定義を として渡すのは少し乱用idです。次のように呼び出すこともできます(より正直です):

[self findObjectOfTypeClass:anInstance container: mySprite];

テストするオブジェクトのクラスはどこanInstanceにありますか。しかし今、メソッド名は誤解を招くものです。おそらく次のように実装する方がよいでしょう:

-(int)findObjectOfTypeClass:(Class)classType container:(SPSprite*)sp
{

    for (int i=0; i<sp.numChildren; i++) {

        if([[sp childAtIndex:i] isKindOfClass:classType])
        {
            return i;
        }
    }
    return -1;

}

そして、それを次のように呼び出します。

 [self findObjectOfTypeClass:[NSObject class] container: mySprite];

説明がはるかに正確で、読みやすいためです。

于 2013-06-14T16:28:40.903 に答える
2

次のように、クラスメソッド を使用する必要があります。

[self findObjectOfTypeClass: [NSObject class] container: mySprite];

署名に関しては、これは正しいでしょう:

-(int)findObjectOfTypeClass:(Class)classType container:(SPSprite*)sp;
于 2013-06-14T16:26:44.247 に答える