如何解决覆盖Objective-C中.h文件中的静态常量int?
我正在尝试在OC中构建应用程序,并在.h
文件中有一个常量,该常量定义菜单上应包含多少列:
// cellManager.h
static int const cellNumberPerRow = 4;
现在在我的视图管理器文件(.m
)中,当字体大小更改时,我需要将列数更改为3。到目前为止,我已经尝试过:
// menuManagerView.m
if ([self isBigFontSize]) {
// ....
cellNumberPerRow = 3;
// ...
但这给我一个错误Cannot assign to variable 'cellNumberPerRow' with const-qualified type 'const int'
;当我尝试像这样之前添加标识符时:
static int const cellNumberPerRow = 3;
出现警告Unused variable 'cellNumberPerRow'
,列号仍为4;
我觉得应该有一种优雅的方法来做到这一点,但在任何地方都找不到。我真的是iOS开发人员的新手,非常感谢任何人的投入,谢谢!
更新
我定义了一个新的整数变量,为其分配了const变量的值,并用cellNumberPerRoe
文件中的新变量替换了所有旧的.m
。现在工作了。但是我想知道是否还有更好的方法?
static int newCellNumberPerRow = cellNumberPerRow;
解决方法
如果您想在某些情况下更改常量的值,则表示它不再是常量。您可以通过使用指针来绕过const
编译器检查,但这适得其反。完全从定义中删除const
会容易得多。
我建议作为替代的是文件管理器类中的计算属性,如下所示:
typedef NS_ENUM(int,CellNumberPerRow) {
defaultCellNumberPerRow = 4,smallerCellNumberPerRow = 3,};
@interface YourManager: NSObject
@property(readonly,nonatomic) int currentCellNumberPerRow;
@end
@implementation DocumentItem
-(int)currentCellNumberPerRow {
if ([self isBigFontSize]) {
return smallerCellNumberPerRow;
}
return defaultCellNumberPerRow;
}
@end
现在要获取每行合适的单元格编号,您可以改用currentCellNumberPerRow
属性。
也许将currentCellNumberPerRow
设为类属性@property(class,...)
而不是实例属性也可能很方便。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。