【发布时间】:2021-09-18 12:04:19
【问题描述】:
假设我有一个类Participant,看起来像这样
Participant.h
@interface Participant : NSObject
@property(nonatomic, readonly) NSString *name;
@property(nonatomic, readonly) NSString *id;
@end
这里的属性是readonly,因为我不希望任何人使用这个接口来改变它
除了ParticipantManager.h
我应该在Participant 类中进行哪些更改以及如何创建ParticipantManager 以便只有ParticipantManager 可以更改Participant 的属性
更多上下文
当值发生变化时,我从react-native 收到一个事件。为了保持同步,我希望我的界面 ParticipantManager 只更改值。
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
@interface ParticipantManager : RCTEventEmitter <RCTBridgeModule>
@end
^^以上类应该只能更改Participant类的属性
如果用户更改值,他会调用changeName 方法,该方法会将事件发送回react-native,其中react-native 将更改值并发送回本机代码
我尝试过的。
所以,我考虑过使用类扩展概念,但出现错误。
这就是我所做的
我创建了实现 setName 方法的Participant+Private.h
#import " Participant.h"
interface Participant()
- (void)setName:(NSString)name
- (void)setId:(NSString)name
@end
PS:我在Participant.h中实现了setName和setId方法
- (void)setName:(NSString)name {
_name = name;
}
但是当我在我的 ParticipantManager.h 中使用它时,它会抛出错误
Participant没有可见的@interface@声明选择器setName
我就是这样用的
#import "Participant+Private.h"
NSString* value = @"varun";
[[Participant sharedInstance] setName:value];
有人可以帮我修复错误吗?
这里稍微详细的问题: No visible @interface for Participant declares the selector setName
【问题讨论】:
-
"假设我有一个 coco touch 类 Participant.h" 你没有。 Participant.h 是文件名,而不是类名; Participant 是 你的 类的名称,而不是 Cocoa Touch 类。
-
已编辑问题:)
标签: ios objective-c iphone xcode