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

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

修改成功!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 出题者简介: 孙源(sunnyxx),目前就职于百度,负责百度知道 iOS 客户端的开发工作,对技术喜欢刨根问底和...
    戈多_于勒阅读 5,755评论 0 5
  • 互联网就像是生产碎片信息的永动机,信息不知从哪里生产出来,又最终投放到哪个人,似乎人人都在改变这个世界,却不是人人...
    Daring_dd阅读 2,224评论 0 0
  • 一阵风 天就咧出个大雁模样的豁口儿 轻轻一吹 皱了江面 好似一片绸缎 纹路自然天成 净水清风 支起个简单的,秋的剪...
    平心如我阅读 1,396评论 0 0
  • 有一段悲伤的记忆,关于离开,关于阴阳两隔。 1 我姥爷去世几年了,像是经历了一场变故,承受了一段折磨...
    Cinephile1997阅读 3,928评论 1 6
  • 希望你可以 什么都不去想 然后不动声色地 成为大人。 但是你 把烦琐一件一件地装进玻璃瓶后 悬在宅前的百年老树上 ...
    一角天空阅读 1,189评论 0 2

友情链接更多精彩内容