Deklaruje statyczne zmienne członkowskie, takie jak Java w Objective-C

Jak mogę utworzyć klasę Objective-C ze zmiennymi poziomu klasy, takimi jak ta klasa 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";

}

Chcę uzyskać do nich dostęp bez tworzenia instancji, jak:

String abc = test.tableName;
Author: jscs, 2013-05-02

6 answers

Wygląda na to, że chcesz utworzyć stałe(ponieważ używasz final w swoim pytaniu). W Objective-C możesz do tego użyć extern.

Zrób coś takiego:

1) Utwórz nową klasę Objective-C o nazwie stałe.

2) w nagłówku (.H) plik:

extern const NSString *SERVICE_URL;

3) w realizacji (.m) plik:

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

4) dodaj #import "Constants.h" do dowolnej klasy, w której chcesz jej użyć

5) dostęp bezpośrednio jako NSString *url = SERVICE_URL;


Jeśli nie chcesz tworzyć stałe i po prostu chcesz użyć static w Objective-C, niestety możesz użyć tylko static w implementacji (.m) akta. I mogą być dostępne bezpośrednio bez prefiksu nazwy klasy.

Na przykład:

static NSString *url = @"something";
Mam nadzieję, że to pomoże.
 37
Author: Avtar Guleria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 07:50:57

Spróbuj....

static NSString *CellIdentifier = @"reuseStaticIdentifier";

Możesz uzyskać dostęp do wartości bezpośredniej za pomocą właściwości syntezy
możesz też użyć NSUserDefaults do przechowywania i pobierania wartości

Opis

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

Realizacja:

#import "MyClass.h"

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

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

Użycie:

#import "MyClass.h"

@implementation AppDelegate

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

@end
Mam nadzieję, że pomogłem.
 31
Author: Chirag Pipaliya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-11 08:28:38

Musisz użyć metody klasowej, aby uzyskać dostęp do wszystkiego, co można wywołać bez tworzenia instancji .

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

Realizacja:

#import "MyClass.h"

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

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

Jak używać:

#import "MyClass.h"

@implementation AppDelegate

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

@end
 10
Author: Anoop Vaidya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 05:36:39

Objective-C nie ma zmiennych klasy

Zalecałbym umieszczenie statycznego Nsstringa w pliku implementacji twojej klasy i podanie metod klasowych, aby uzyskać do niego dostęp

@implementation MyClass

static  NSString* str;
 2
Author: Linga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 05:30:39

Można zrobić tak:

@interface Test
 {
   static NSString *tableName;
 }

+(NSString *) getTableName;
@end

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

A potem go ściągasz:

NSString *name = [Test getTableName];
 2
Author: Andrey Chernukha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 05:35:11

Myślę, że najlepszym i bardziej używanym sposobem jest użycie enum takich jak

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

Tuż przed @interface GSPaymentMethod

W ten sposób możesz używać tych stałych w dowolnym miejscu, włączając plik .h

Na przykład

[self newPayment:GSPAYMENT_METHOD_CASH]

 2
Author: Jordi Puigdellívol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-13 15:23:59