两个类,相同的属性名称,不同的类型 - >被覆盖

时间:2014-10-18 00:32:05

标签: ios xcode class override instance-variables

我有以下设置:两个类,一个导入另一个,两个都有一个恰好具有相同名称但属性不同的属性。

当我尝试访问ClazzB中的someColor属性时,出现错误:

[[[ClazzB sharedInstance] someColor] CGColor]

错误: 没有可见的@interface用于' NSString'声明选择器' 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;

非常感谢任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:1)

上面我要求您提供sharedInstance方法的共享声明,但我怀疑它是

+ (id)sharedInstance;

这是一个问题的原因。在这种情况下,编译器不知道你将到达那里的确切类型,只选择someColor的第一个匹配选择器,它返回NSString *

我建议您将sharedInstance方法声明更改为

+ (instancetype)sharedInstance;

+ (ClazzA *)sharedInstance;
+ (ClazzB *)sharedInstance;

我更喜欢instancetype方式。