我想检查一个对象(例如someObject
)是否可以分配给另一种类型的变量(例如SpecifiedType
)。在Java中,我可以这样写:
someObject instanceof SpecifiedType
一个相关的问题是如何判断对象的运行时类型是否等于另一种类型。在Java中,我可以这样写:
someObject.getClass().equals(SpecifiedType.class)
如何在Objective-C中实现这个?
我想检查一个对象(例如someObject
)是否可以分配给另一种类型的变量(例如SpecifiedType
)。在Java中,我可以这样写:
someObject instanceof SpecifiedType
一个相关的问题是如何判断对象的运行时类型是否等于另一种类型。在Java中,我可以这样写:
someObject.getClass().equals(SpecifiedType.class)
如何在Objective-C中实现这个?
使用[myObject class]
可以返回对象的类。
你可以使用以下方法进行精确比较:
if ([myObject class] == [MyClass class])
但不能直接使用MyClass
标识符。
同样地,你可以通过以下方法查找对象是否为你的类的子类:
if ([myObject isKindOfClass:[AnObject class]])
正如Jon Skeet和zoul所建议的。
if ([myObject isMemberOfClass:[MyClass class]])
进行精确比较。 - user102008来自维基百科:
例如,在 Objective-C 中,通用的
Object
和 Cocoa/OpenStep 中的NSObject
都提供了方法isMemberOfClass:
,如果该方法的参数是指定类的实例,则返回true
。 方法isKindOfClass:
同样地,如果参数继承自指定的类,则返回true。
isKindOfClass:
听起来最接近于instanceof
。
+ (BOOL)conformsToProtocol:(Protocol *)aProtocol
。 - EricLeaf