isKindOfClass:(Class)aClass
関数と関数はどう違いisMemberOfClass:(Class)aClass
ますか?1つはグローバルで、もう1つは完全に一致するクラスですが、どちらがどちらであるかを指定する必要があります。
SwiftisKind(of aClass: AnyClass)
とisMember(of aClass: AnyClass)
.
isKindOfClass:(Class)aClass
関数と関数はどう違いisMemberOfClass:(Class)aClass
ますか?1つはグローバルで、もう1つは完全に一致するクラスですが、どちらがどちらであるかを指定する必要があります。
SwiftisKind(of aClass: AnyClass)
とisMember(of aClass: AnyClass)
.
isKindOfClass:
YES
レシーバーが指定されたクラスのインスタンスであるか、または指定されたクラスを継承する任意のクラスのインスタンスであるかを返します。
isMemberOfClass:
YES
レシーバーが指定されたクラスのインスタンスである場合にのみ、を返します。
ほとんどの場合isKindOfClass:
、コードがサブクラスでも機能することを確認するために使用します。
NSObject プロトコル リファレンスでは、これらのメソッドについてもう少し詳しく説明しています。
isKindOfClass:
オブジェクトが特定のクラスから継承するかどうかを示しますisMemberOfClass:
オブジェクトが特定のクラスのインスタンスであるかどうかを示します。[[NSMutableData data] isKindOfClass:[NSData class]]; // YES
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO
仮定する
@interface A : NSObject
@end
@interface B : A
@end
...
id b = [[B alloc] init];
それから
[b isKindOfClass:[A class]] == YES;
[b isMemberOfClass:[A class]] == NO;
基本的に-isMemberOfClass:
、インスタンスが指定されたクラスと正確に一致する場合は true であり、インスタンスが指定されたクラス-isKindOfClass:
と正確に一致する場合、またはインスタンスの祖先の 1 つが指定されたクラスである場合は true です。
-isMemberOfClass:
めったに使用されません。
isKindOfClass:レシーバーが特定のクラスのインスタンスであるか、そのクラスから継承するクラスのインスタンスであるかを示すブール値を返します。
isMemberOfClass:レシーバーが特定のクラスのインスタンスであるかどうかを示すブール値を返します。
isKindOfClass-> オブジェクトがそのクラスのインスタンスまたはそれから継承されたクラスのインスタンスである場合に YES を返します。
isMemberOfClass: オブジェクトがそのクラスのインスタンスである場合は YES を返しますが、継承されたクラスのインスタンスである場合は No を返します。
例はjtbandesの回答で十分です。
クラスクラスターがあるため、isMemberOfClassは予期しない答えを与える可能性があります。多くの場合、最良の選択は-(BOOL)conformsToProtocol:(SEL)aSelectorまたは-(BOOL)conformsToProtocol:(Protocol *)aProtocolである可能性が高くなります。つまり、クラス/サブクラスをテストするよりも、ニーズに答えられる場合はこれらをテストする方が適切です。
NSObjectのクラスとプロトコルについては、アップルのドキュメントを参照してください。