美文网首页
修改声明为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