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

标签 ios xcode class overriding instance-variables

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

当我尝试访问 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/

相关文章:

iphone - 如何在 iPad 应用程序中显示 GridView 等数据

iphone - UICollectionView 中的 iOS 断言失败

iOS - watchOS 应用 ITMS-90806 : CFBundleIdentifier collision Alamofire

ios - 添加新的构建规则来解析所有 rtf 文件

c++ - 具有二维数组的类中的否定运算符重载

ios - 如何编辑 UINavigationBar 中左、右 UIBarButtonItem 的空白区域 [iOS 7]

iphone - iPad 应用程序中的动画

matlab - 解决与内置函数的名称冲突,另请参阅文档部分

python - 如何将类构造函数传递给 python 函数

ios - 从 UITableView 中删除表头后,还有一个空隙