美文网首页
修改声明为readonly的属性值(iOS)

修改声明为readonly的属性值(iOS)

作者: Minnie_Liu | 来源:发表于2017-09-21 15:51 被阅读0次

    readonly:只读属性,只生成getter方法,也就是说只能访问变量,不能修改。

    那我们如果想要改变类中声明为readonly的属性值该怎么做呢?

    如果直接用属性的setter方法,那么就直接报错,提示不能给声明为readonly的属性赋值。

    这个时候我们可以用KVC来给声明为readonly的属性重新赋值。

    例:

    Dog.h

    @interface Dog: NSObject

    @property (nonatomic, assign, readonly) NSInteger num;

    @property (nonatomic, copy, readonly) NSString *name;

    - (instancetype)initNum:(NSInteger)num name:(NSString *)name ;

    @end

    *******

    Dog.m

    @implementation Dog

    - (instancetype)initNum:(NSInteger)num name:(NSString *)name {

    self = [super init];

    if (self) {

    _num=num;

    _name=[name copy];

    }

    return self;

    }

    ************************

    Dog *dogOne=[[Dog alloc]initNum:1 name:Tom];

    如何修改dogOne对象的name属性值为Jerry。

    dogOne=@“Jerry”//会直接报错,不能给声明为readonly的属性赋值

    用KVC

    [dogOne setValue:@"Jerry" forKey:NSStringFromSelector(@selector(name))];

    NSlog(@" dogOne name=%@",dogOne.name);

    运行结果

    dogOne name=Jerry

    修改成功!!!

    相关文章

      网友评论

          本文标题:修改声明为readonly的属性值(iOS)

          本文链接:https://www.haomeiwen.com/subject/ooozsxtx.html