Класс с заданными значениями статической константы в Objective-C

Я хочу создать класс, который будет содержать статические значения, доступные из любого проекта.

псевдокод:

class Constants:
  constant String API_URL : "http://api.service.com"
  constant Integer SOME_VALUE : 7

Как это сделать с помощью Objective-C?

Ответ 1

Вы можете сделать это с помощью препроцессоров:

#define API_URL @"http://api.service.com"
#define SOME_VALUE (7)

Доступ к определениям будет простым: [object do:API_URL];

Или вы можете использовать константы

NSString * const apiURL = @"http://api.service.com";
NSNumber * const someValue = @7;

Доступ к consts будет похож на доступ к переменным, поэтому строка просто будет простым вызовом. NSNumber - это обертка объектов для примитивов, поэтому вам нужно получить к ней доступ, например: someValue.intValue

Ответ 2

Ответ на ваш вопрос - ключевое слово extern. Я объясню это вам, используя пример. Добавьте объектные классы c вашему проекту и назовите их Common, Now in Common.h

     @interface Common : NSObject

     extern NSString *SiteApiURL;

     @end

После того, как вы определили экземпляр класса NSString с использованием ключевого слова extern, вам нужно переключиться на класс Common.m и инициализировать значение для NSString (SiteApiURL)

     #import "Common.h"

     @implementation Common

     NSString *SiteApiURL = @"http://api.service.com";

     @end

Импортируйте класс Common.h в файл project-Prefix.pch, подобный этому

    #import <Availability.h>

    #ifndef __IPHONE_3_0
    #warning "This project uses features only available in iOS SDK 3.0 and later."
    #endif

    #ifdef __OBJC__
        #import <UIKit/UIKit.h>
        #import <Foundation/Foundation.h>
        #import "Common.h"
    #endif

Все сделано, теперь вы можете использовать объект "SiteApiURL" в любом месте всего проекта, и вам не нужно импортировать какой-либо класс в любом месте, т.е. вы можете использовать эту переменную в любом месте проекта напрямую.

Ответ 3

Вы можете создать Singleton со всеми необходимыми константами Вот пример

Если вы не хотите создавать класс, вы можете использовать статические частные переменные и статические геттеры.

@interface

+(NSString*) getValue;

@end


@implementation

static NSString *_value = @"....";

+(NSString*) getValue {
   return _value;
}

@end