在Objective-C中声明像Java一样的静态成员变量

时间:2013-05-02 05:25:40

标签: java objective-c class static

如何使用像这个Java类的类级变量创建一个Objective-C类?

public class test
{

    public static final String tableName = "asdfas";    
    public static final String id_Column = "_id";
    public static final String Z_ENT_Column = "Z_ENT";

}

我想在不创建实例的情况下访问它们,例如:

String abc = test.tableName;

6 个答案:

答案 0 :(得分:34)

看起来你想要创建常量(因为你在问题中使用final)。在Objective-C中,您可以使用extern

做这样的事情:

1)创建一个名为Constants的新Objective-C类。

2)在标题(.h)文件中:

extern const NSString *SERVICE_URL;

3)在实现(.m)文件中:

NSString *SERVICE_URL = @"http://something/services";

4)将#import "Constants.h"添加到您要使用它的任何类

5)直接访问NSString *url = SERVICE_URL;


如果您不想创建常量并且只想在Objective-C中使用static,那么很遗憾,您只能在实现(.m)文件中使用static。并且可以直接访问它们而无需为类名添加前缀。

例如:

static NSString *url = @"something";

我希望这会有所帮助。

答案 1 :(得分:28)

试试吧......

static NSString *CellIdentifier = @"reuseStaticIdentifier";

您可以使用综合属性来访问直接值 或者你可以使用NSUserDefaults来存储和追溯值

描述

@interface MyClass : NSObject
+(NSString *)myFullName;
@end

实施:

#import "MyClass.h"

@implementation MyClass
static NSString *fullName = @"Hello World";

+(NSString *)myFullName{
  return fullName;
}
@end

使用:

#import "MyClass.h"

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
  NSLog(@"%@",[MyClass myFullName]); //no instance but you are getting the value.
}

@end

希望我帮助过。

答案 2 :(得分:10)

您需要使用类方法来访问任何可以在不创建实例的情况下调用的内容

@interface MyClass : NSObject
+(NSString *)myFullName;
@end

实施:

#import "MyClass.h"

@implementation MyClass
   static NSString *fullName=@"anoop vaidya";

+(NSString *)myFullName;{
    return fullName;
}
@end

使用方法:

#import "MyClass.h"

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
    NSLog(@"%@",[MyClass myFullName]); //no instance but you are getting the value.
}

@end

答案 3 :(得分:2)

Objective-C没有类变量

我建议将静态NSString放在类的实现文件中,并提供类方法来访问它

@implementation MyClass

static  NSString* str;

答案 4 :(得分:2)

可以这样做:

@interface Test
 {
   static NSString *tableName;
 }

+(NSString *) getTableName;
@end

@implementation Test
+ (NSString *)getTableName
 {
    return tableName;
 }
@end

然后你去取它:

NSString *name = [Test getTableName];

答案 5 :(得分:2)

我认为最好的方法和更多使用的是使用诸如

之类的枚举
enum{
    GSPAYMENT_METHOD_CARD = 1,
    GSPAYMENT_METHOD_CASH = 2,
    GSPAYMENT_METHOD_VOID = 3
};
typedef NSUInteger PaymentMethodType;

@interface GSPaymentMethod

之前

这样,只需包含.h文件

,就可以在任何地方使用这些常量

例如

[self newPayment:GSPAYMENT_METHOD_CASH]