Создание постоянного в объективах-C, которое называется как свойство класса? (например, classa.key_for_item1)

StackOverflow https://stackoverflow.com/questions/8373800

Вопрос

Каким будет способ создать константу в Objective-C, которая называется свойством класса? (например, classa.key_for_item1)

То есть я вижу советы, как создать константу здесь http://stackoverflow.com/questions/538996/constants-in-bjective-c Этот подход, однако, кажется, создает константу, которая является глобальной и может быть упомянута в любом месте.

Меня больше интересовали постоянную, что вам пришлось указать контекст, используя имя класса. Скажите, что у вас был объект события, тогда у вас может быть указана константы EventType (например, eg Eventtype_direct)

  EventType.EVENTTYPE_DIRECT

Таким образом, вопрос в том, какими будут сегменты кода *.h и *.m для этого

Это было полезно?

Решение

Мне кажется, что вы приходите из языкового фона в стиле Java, как и я (извините, если я предполагаю здесь не так). Я тоже подумал об этом некоторое время, а затем заметил, как Apple определяет перечисления и использует их для определения констант, как вы описываете.

Давайте использовать воображаемый класс Event В качестве примера:

В файле заголовка вы хотите определить новый перевод:

typedef enum {

    kEventType_EventName1,
    kEventType_EventName2,
    kEventType_EventName3

}EventType;  //this is the name of the new type

куда EventName1 и т.д. заменяется реальными именами желаемых событий (т.е. kEventType_Direct.

Любой другой класс, который должен видеть эти типы событий, просто необходимо импортировать файл Event.h:

#import "Event.h"

Тогда вы можете использовать EventType Как бы вы могли бы любой другой тип переменной (с учетом того, что он не NSOBject и не может быть сохранен, освобожден и т. Д.

Вы даже можете иметь типичные переменные EventType в качестве членов других классов, если эти классы импортируют ваше мероприятие.

Но это позволяет вам делать такие вещи:

-(void) handleEventOfType: (EventType) evtType {

    switch(evtType) {
        case kEventType_EventType1 :
            //stuff here
            break;

        //etc...

    }
}

Это лучший способ, который я видел, чтобы сделать это до сих пор, и кажется, как обычно практикуется за границей (по крайней мере, в большинстве проектов, которые я видел). В любом случае, надеюсь, это поможет!

Другие советы

Не ясно, что вы здесь пытаетесь сделать - «постоянная», которую нужно использовать для замены свойства в классе, или Class1.constant должен вернуть другое значение к Class2.constant?

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

В последнем случае каждый класс может иметь метод класса с вашим необходимым именем, которое возвращает значение, подходящее для класса. Опять же, если это изменит инструменты рефакторинга, помогут.

Добавление констант к этому миксу кажется ненужным и вносит дополнительную зависимость (поддержание констант) без какой -либо реальной пользы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top