Objective c iOS中静态常量变量的子类化问题
我有A班和B班 B类是A类的子类 类A有一个静态常量NSString变量 在类B的方法中,我需要使用类a的静态常量NSString变量。我的选项是什么 我尝试再次声明相同的内容,但导致了问题(内部不一致),尝试时没有使用(比如,变量未声明) 你知道我怎样才能解决这个问题吗Objective c iOS中静态常量变量的子类化问题,objective-c,ios,Objective C,Ios,我有A班和B班 B类是A类的子类 类A有一个静态常量NSString变量 在类B的方法中,我需要使用类a的静态常量NSString变量。我的选项是什么 我尝试再次声明相同的内容,但导致了问题(内部不一致),尝试时没有使用(比如,变量未声明) 你知道我怎样才能解决这个问题吗 谢谢。我个人对此问题的解决方案是使用伪保护方法返回常量字符串 // ClassA.m @interface ClassA () - (NSString *)constantString; @end @implement
谢谢。我个人对此问题的解决方案是使用伪保护方法返回常量字符串
// ClassA.m
@interface ClassA ()
- (NSString *)constantString;
@end
@implementation ClassA
- (NSString *)constantString {
return @"MyConstantString";
}
@end
然后进入您的子类:
// ClassB.m
@interface ClassA ()
// This is a method redeclaration to avoid build warnings
- (NSString *)constantString;
@end
@implementation ClassB
- (void)someMethod {
NSString *theConstantString = [self constantString];
// do stuff...
}
@end
这里的假设是您的常量字符串实际上是常量,如果您希望它是动态的,您需要稍微修改此解决方案,但它仍然可以处理它。通过“类A有一个静态常量NSString变量”,我假设您指的是在类A.m文件中定义如下内容:
static NSString * const MyString = @"MyString";
@implementation ClassA
@end
要允许类A及其子类查看值,可以执行以下操作:
+(NSString*) constString {
return myConstString;
}
MDClassAPrivate.h:
#import <Foundation/Foundation.h>
static NSString * const MDBlahBlahKey = @"MDBlahBlah";
MDB.h类:
#import "MDClassA.h"
@interface MDClassB : MDClassA {
}
@end
MDClassB.m:
#import "MDClassB.h"
#import "MDClassAPrivate.h"
@implementation MDClassB
@end
通过将静态常量变量移动到单独的文件中,您可以允许任何类在实现文件中导入它们。创建一个类方法,返回该常量,如下所示:
+(NSString*) constString {
return myConstString;
}
可以在.h文件中声明静态常量字符串。这样,它们是公共的,可以被导入头文件的其他类使用,包括您的子类 或者,您可以使用extern声明对类B中字符串的引用:
extern NSString *const MyString;
这基本上告诉编译器该字符串的值是在代码的其他地方定义的,它不必担心它。您可以使用“userDefaults”来设置一个在整个应用程序中都可以访问的值
[[NSUserDefaults standardUserDefaults] setObject:object forKey:@"objectKey"];
你为什么不发布你的代码呢。
[[NSUserDefaults standardUserDefaults] setObject:object forKey:@"objectKey"];