在Objective-C中声明静态成员变量,类似于Java的方式

19

我该如何创建一个带有类级变量的Objective-C类,就像这个Java类一样?

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;

你是在问 Obj-c 中的类方法吗? - Anoop Vaidya
静态的NSString *CellIdentifier = @"reuseStaticIdentifier"; - Chirag Pipaliya
不好意思,请查看相关的Java类,我想要类似的东西。 - Awais Tariq
6个回答

38

看起来你想创建常量(因为你在问题中使用了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";

我希望这可以帮助到你。


extern不被视为编程的最佳方式。 - Anoop Vaidya
const NSString * 中的 const 是没有意义的。无论如何,您都不允许直接操作指针所指向的对象。 - newacct
@AnoopVaidya:extern 有什么问题吗?在原始的Java代码中,这些变量特别是 public,这意味着它们应该可以从其他文件中使用。extern 正是允许这样做的。 - newacct
@newacct: 我更喜欢通过SharedInstance/Singleton类在整个应用程序中共享数据。 - Anoop Vaidya
嘿,我之前做了一个Gist,虽然不兼容ARC,但是可以通过使用assign方法并指定强或弱引用在ARC中实际使用。它更接近于原始问题的要求:https://gist.github.com/darionco/03649feeee57f86fee3f - Dario

31

试一下....

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
希望我有所帮助。

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

2

Objective-C没有类变量

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

@implementation MyClass

static  NSString* str;

2
可以这样做:
@interface Test
 {
   static NSString *tableName;
 }

+(NSString *) getTableName;
@end

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

然后你可以获取它:

NSString *name = [Test getTableName];

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]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接