我有以下设置:两个类,一个导入另一个,都有一个恰好具有相同名称但类型不同的属性。
当我尝试访问 ClazzB 中的 someColor 属性时,出现错误:
[[[ClazzB sharedInstance] someColor] CGColor]
错误: “NSString”没有可见的@interface 声明选择器“CGColor”
错误清楚地表明它从 ClazzA 获取属性,问题是为什么?是否有一些奇怪的名称被覆盖了?
这里是设置:
@interface ClazzA : NSObject {
@private
NSString* _someColor;
}
@property (nonatomic, copy) NSString* someColor;
ClazzB 导入 ClazzA 并具有同名但类型不同的属性。
#import "ClazzA.h"
@interface ClazzB : NSObject {
UIColor* _someColor;
}
@property (nonatomic, strong) UIColor* someColor;
非常感谢任何帮助!
谢谢!
最佳答案
上面我要求您提供sharedInstance
方法的共享声明,但我怀疑它是
+ (id)sharedInstance;
这是一个问题的原因。在这种情况下,编译器不知道您将到达那里的确切类型,只是为返回 NSString *
的 someColor
选择第一个匹配的选择器。
我建议将您的 sharedInstance
方法声明更改为
+ (instancetype)sharedInstance;
或
+ (ClazzA *)sharedInstance;
+ (ClazzB *)sharedInstance;
我更喜欢instancetype
方式。
关于ios - 两个类,相同的属性名称,不同的类型 -> 被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26435175/