你需要做的就是获取一个属性的类
[email class];
[password class];
还有一些方法可以使用isKindOfClass: 和isMemberOfClass: 甚至isSubclassOfClass: 来测试对象类
你可以在if statements中使用这些
if([email isKindOfClass:[NSString class]])
和/或
if([password isMemberOfClass:[NSString class]])
和/或
if([[email class] isSubclassOfClass:[NSString class]])
关于这些的描述,请阅读Apple Documentation on NSObject class reference.和Apple Documentation on NSObject protocol reference
isSubclassOfClass:
返回一个布尔值,指示接收类是给定类的子类还是与给定类相同。
+ (BOOL)isSubclassOfClass:(Class)aClass
参数
类
一个类对象。
返回值
如果接收类是aClass 的子类或相同,则为YES,否则为NO。
可用性
适用于 iOS 2.0 及更高版本。
声明于
objc/NSObject.h
isKindOfClass:
返回一个布尔值,指示接收者是给定类的实例还是从该类继承的任何类的实例。 (必需的)
- (BOOL)isKindOfClass:(Class)aClass
参数
类
表示要测试的 Objective-C 类的类对象。
返回值
如果接收者是 aClass 的实例或继承自 aClass 的任何类的实例,则为 YES,否则为 NO。
讨论
例如,在此代码中,isKindOfClass: 将返回 YES,因为在 Foundation 中,NSArchiver 类继承自 NSCoder:
NSMutableData *myData = [NSMutableData dataWithCapacity:30];
id anArchiver = [[NSArchiver alloc] initForWritingWithMutableData:myData];
if ( [anArchiver isKindOfClass:[NSCoder class]] )
...
在类簇表示的对象上使用此方法时要小心。由于类簇的性质,您返回的对象可能并不总是您期望的类型。如果您调用返回类簇的方法,则该方法返回的确切类型是您可以使用该对象做什么的最佳指标。例如,如果某个方法返回一个指向 NSArray 对象的指针,则不应使用该方法查看数组是否可变,如下代码所示:
// 不要这样做!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
如果您在代码中使用此类构造,您可能会认为修改实际上不应该修改的对象是可以的。这样做可能会给其他期望对象保持不变的代码带来问题。
如果接收者是一个类对象,如果aClass是一个相同类型的Class对象,这个方法返回YES,否则返回NO。
可用性
在 OS X v10.0 及更高版本中可用。
另见
– isMemberOfClass:
相关示例代码
QuickLookSketch
草图
草图+辅助功能
声明于
objc/NSObject.h
isMemberOfClass:
返回一个布尔值,指示接收者是否是给定类的实例。 (必需的)
- (BOOL)isMemberOfClass:(Class)aClass
参数
类
表示要测试的 Objective-C 类的类对象。
返回值
如果接收者是一个类的实例,则为YES,否则为NO。
讨论
例如,在此代码中,isMemberOfClass: 将返回 NO:
NSMutableData *myData = [NSMutableData dataWithCapacity:30];
id anArchiver = [[NSArchiver alloc] initForWritingWithMutableData:myData];
if ([anArchiver isMemberOfClass:[NSCoder class]])
...
类对象可能是编译器创建的对象,但它们仍然支持成员资格的概念。因此,您可以使用此方法来验证接收方是否为特定的 Class 对象。
可用性
在 OS X v10.0 及更高版本中可用。
另见
– isKindOfClass:
声明于
objc/NSObject.h
编辑
当尝试在另一个类中访问这些属性时(这不是您在问题中提出的问题),请执行以下操作。
Testing *testingClassIVar = [[Testing alloc] init];
[testingClassIVar email];
[testingClassIVar password];
// to get the class type of these
[[testingClassIVar email] class];
[[testingClassIVar password] class];
编辑 2
OMG 只是 NO 我什至不知道您要做什么,但这似乎非常错误。 NSArray 不响应 addObject: 所以这会使你的代码崩溃。如果您想使用addObject:,则将NSArray 更改为NSMutableArray,但除非您计划在循环中使用该数组(如果您愿意,请指定我不会假设)然后只需使用[detail email] 访问该属性
改成这个
testing *detail= [[testing alloc] init];
if([[detail email] isKindOfClass:[NSString class]]) {
NSLog("This is string class variable");
}