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

2017-09-21  本文已影响0人  Minnie_Liu

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

修改成功!!!

上一篇下一篇

猜你喜欢

热点阅读