ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)

这篇博客探讨了在iOS的CoreData框架中,当使用父类实例对象接收包含子类对象的数组时,打印这些对象的.class属性会得到什么结果。作者通过创建Person类及其子类Student和Teacher进行测试,发现即使通过父类引用子类对象,.class仍然能返回子类的名称。这使得在遍历数组时可以通过.class来判断对象的子类类型,从而实现特定的赋值操作。
摘要由CSDN通过智能技术生成

新建Person类

person的子类 Student

    Teacher  

今天做数据库封装时想到的,因为查询出的结果都继承自NSManagerObject,但是他的子类属性又不一定一样,所以我就想我在在查询之后能不能判断他是那个子类并且按照子类的属性进行赋值,所以首先我要数组存的对象的类进行判断

测试如下:(把主要代码贡献如下,其他文件自己建议下吧,很简单)

NSMutableArray * array = [NSMutableArray array];

    NSMutableArray * array2 = [NSMutableArray array];

    for (int i = 0; i< 5; i++) {

        Student * stu1 = [[Student alloc]init];

        stu1.name =[NSString stringWithFormat:@"jack%i",i];

        [array addObject:stu1];

        

        Teacher * teacher = [[Teacher alloc]init];

        teacher.name = [NSString stringWithFormat:@"limei%i",i];

        [array2 addObject:teacher];

    }

    

    for (Person * p in array) {

        NSLog(@"%@------",p.class);

    }

    

    for (Person * p in array2) {

        NSLog(@"%@------",p.class);

    }

    

    // 从打印结果可以看出虽然我用他的父类接收,.class后仍能显示子类名称,这样从数组中遍历的对象我可以用.class获取他是哪个子类,并判断如何给他赋值

    

//    例如

    

    for (Person * p in array2) {

        if (p.class == [Student class]) {

            NSLog(@"是学生");

        }else {

            NSLog(@"不是学生");

        }

    }

    

    if ([array[0] class] == [Student class]) {

        NSLog(@"是学生");

    }else{

        NSLog(@"不是学生,是%@",[array[0] class]);

    }


ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值