Я только что обновился до XCode 9, и он начал давать мне эту проблему. Я создал новый набор изображений в разделе «Активы» и добавил изображения, которые я хотел для этого, а затем добавил их к своим изображениям на вкладке с пользовательскими именами, и он отлично работал. Надеюсь, это поможет!
этот хороший стиль программирования?
я думаю так. Я делаю то же самое вполне часто.
там лучший способ сделать это?
class Button
{
public:
// Used for array indexes! Don't change the numbers!
enum State {
NORMAL = 0,
PRESSED,
CLICKED,
NUMBER_OF_BUTTON_STATES
};
};
Недостаток состоит в том, что NUMBER_OF_BUTTON_STATES является теперь допустимым Кнопка:: Состояние значение. Не большая проблема, если Вы раздаете эти значения как ints. Но проблема, если Вы на самом деле ожидаете Кнопка:: Состояние .
Используя перечисление, поскольку индекс массива не чувствует себя хорошо.
Это прекрасно. Всего ДОКУМЕНТ это, таким образом, следующий парень знает то, что продолжается! (Это - то, для чего комментарии.)
я должен определить значения перечисления?
Без '=' присвоение, перечисление предполагается к , запускаются в нуле и инкременте вверх.
, Если перечислимая запись имеет '=' присвоенное значение, последующее не '=', перечислимые записи продолжают рассчитывать оттуда.
Источник: Аннотируемый Справочник C++, pg 113
Однако мне нравится определять начальное значение только для создания кода что намного более ясным.
Да это будет работать хорошо. Однако в любом случае действительно необходимо поместить другую запись в перечисление, определяющее значение количества объектов:
enum ButtonState {
BUTTON_NORMAL,
BUTTON_PRESSED,
BUTTON_CLICKED,
STATE_COUNT
};
Тогда можно определить массив как
Color colors[STATE_COUNT];
иначе, это - путаница для хранения суммы состояний синхронной с размером массива. Перечисления будут всегда запускаться с нуля, если не иначе инициализированный, и затем каждой дополнительной записи присвоят значение один выше предыдущего, если не иначе инициализированный. Конечно, также не причинило бы боль при помещении нуля явно, если Вы хотите. Если бы Вы не возражаете против дополнительного кода, я обернул бы доступ к необработанному массиву с помощью функции как
Color & operator[](ButtonState state) {
return array[state];
}
Или эквивалент getColor
функция, передающая запрос. Это запретило бы непосредственно индексацию массива с некоторым целым числом, которое почти наверняка в какой-то момент перестанет работать, потому что каждый понимает индексы превратно.
Совершенно нормально использовать перечисление для индексации в массив.
Вы не должны определять каждое перечисление значений, они увеличат автоматически 1. Разрешение компилятору выбрать значения уменьшает возможность ввода с опечатками и создания ошибки, но это лишает Вас наблюдения значений, которые могли бы быть полезными в отладке.
Мудрый стилем, это очень хорошо.
основанные на Паскале языки как Дельфи позволяют границам массива быть определенными как перечислимый тип, таким образом, можно только использовать объекты того определенного типа как индекс.
Вопрос 1: Я думаю, что это - хороший стиль программирования. Я использую все это время. Вопрос 2: Насколько я знаю, это, как гарантируют, проложит себе путь, таким образом, Вы не должны будете определять значения.
И я поместил бы NUM_BUTTON_STATES в перечисление также.
Это прекрасно, но я хотел бы сделать некоторые границы, проверяющие массив, как будто кто-то добавляет другой ButtonState, у Вас будет проблема.
кроме того, элементы массива цветов неизменны, поэтому возможно, смотрят на использование различного набора для выстраивания так, чтобы можно было осуществить ту неизменность. Возможно, Dictionary<ButtonState,ButtonColor>
Используя перечисление в порядке. Но Вы не должны определять значения для каждого объекта. Достаточно определить первое значение. Я не предположил бы, что перечисления запускаются в 0, потому что я использовал компиляторы, которые использовали 1 в качестве начального значения (не для ПК, но некоторые компиляторы для микроконтроллеров имеют некоторое странное поведение). Кроме того, Вы могли избавиться от константы:
enum ButtonState {
BUTTON_NORMAL = 0,
BUTTON_PRESSED,
BUTTON_CLICKED,
NUM_BUTTON_STATES
};