web-dev-qa-db-fra.com

Déclarez les variables membres statiques comme Java dans Objective-C

Comment puis-je créer une classe Objective-C avec des variables de niveau classe comme celle-ci 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";

}

Je veux y accéder sans créer d'instance, comme:

String abc = test.tableName;
16
Awais Tariq

Il semble que vous souhaitiez créer des constantes (puisque vous utilisez final dans votre question). Dans Objective-C, vous pouvez utiliser extern pour cela.

Faites quelque chose comme ça:

1) Créez une nouvelle classe Objective-C nommée Constantes.

2) Dans le fichier d'en-tête (.h):

extern const NSString *SERVICE_URL;

3) Dans le fichier d'implémentation (.m):

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

4) Ajoutez #import "Constants.h" à n'importe quelle classe où vous souhaitez l'utiliser

5) Accédez directement en tant que NSString *url = SERVICE_URL;


Si vous ne voulez pas créer de constantes et souhaitez simplement utiliser static dans Objective-C, vous ne pouvez malheureusement utiliser que static dans le fichier d'implémentation (.m). Et ils sont accessibles directement sans préfixer le nom de la classe.

Par exemple:

static NSString *url = @"something";

J'espère que ça aide.

35
Avtar Guleria

Essayez-le ....

static NSString *CellIdentifier = @"reuseStaticIdentifier";

Vous pouvez accéder à la valeur directe en utilisant la propriété de synthèse
ou vous pouvez utiliser NSUserDefaults pour stocker et récupérer la valeur

La description

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

La mise en oeuvre :

#import "MyClass.h"

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

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

Utilisation:

#import "MyClass.h"

@implementation AppDelegate

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

@end

J'espère que j'ai aidé.

29
Chirag Pipaliya

Vous devez utiliser une méthode de classe pour accéder à tout ce qui peut être appelé sans créer d'instance.

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

La mise en oeuvre :

#import "MyClass.h"

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

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

Comment utiliser:

#import "MyClass.h"

@implementation AppDelegate

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

@end
10
Anoop Vaidya

Pourrait être fait comme ça:

@interface Test
 {
   static NSString *tableName;
 }

+(NSString *) getTableName;
@end

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

Et puis vous le récupérez:

NSString *name = [Test getTableName];
2

Je pense que la meilleure façon et la plus utilisée est d'utiliser des énumérations telles que

enum{
    GSPAYMENT_METHOD_CARD = 1,
    GSPAYMENT_METHOD_CASH = 2,
    GSPAYMENT_METHOD_VOID = 3
};
typedef NSUInteger PaymentMethodType;

Juste avant le @interface GSPaymentMethod

De cette façon, vous pouvez utiliser ces constantes n'importe où en incluant simplement le .h fichier

Par exemple

[self newPayment:GSPAYMENT_METHOD_CASH]

2

Objective-C n'a pas de variables de classe

Je recommanderais de mettre la NSString statique dans le fichier d'implémentation de votre classe et de fournir des méthodes de classe pour y accéder

@implementation MyClass

static  NSString* str;
2