Где хранить постоянные значения в быстром?

Я пытаюсь создать свою первую игру с spritekit в быстром режиме. Я не понимаю, где хранить константы, чтобы я мог сделать их доступными для всего проекта. У меня есть опыт работы с С++, и я использовал для создания файла Constants.h. Есть ли такая вещь в Свифте? Какая рекомендуемая практика для этого?

Сейчас я использую структуру со статическими константами, но я не уверен, правильно ли это сделать:

struct Constants {
    static let gravity : Int = 20
}

Ответ 1

Если у вас есть универсальные константы, необходимые для каждой части вашей программы, это указывает на проблему проектирования (всякий раз, когда вы теряете, где что-то должно происходить, вы, вероятно, сталкиваетесь с проблемой проектирования). Такие вещи, как гравитационная постоянная, не должны быть необходимыми для подавляющего большинства программ, поэтому они обычно не должны быть глобальными константами (это также верно для C++).

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

Даже если вам действительно нужна гравитационная постоянная, вы должны поместить ее в структуру, подобную PhysicalConstants, а не в универсальную Constants (которая затрудняет повторное использование кода, потому что он смешивает несвязанные вещи). Распространенным случаем этого в моем коде являются "стилевые" константы, такие как "цвет подсветки всей системы" (которые могут быть изменены клиентом, поэтому я хочу, чтобы их можно было изменить в одном месте). Они помещаются в заголовок Style.h в моих приложениях, а теперь переходят в структуру Style. Но они хранятся отдельно от нестандартных констант.

Ответ 2

struct Constants {
    static let buildName = "Orange-Pie"

    struct FacebookConstants {
     static let clientId ="asdasdsa"
   }
    struct TwitterConstants {
     static let clientId ="asdasdsa"
   }
}

Использование:

Constants.FacebookConstants.clientId

Ответ 3

Когда я был на WWDC 2014, я спросил инженера о том же. Они рекомендовали использовать ваш метод для замены #define, который мы использовали в Objective-C. Я согласен, что это неоптимальная процедура и ее фактическое определение должно быть реализовано каким-либо образом.

Также обратите внимание, что я не думаю, что вам нужно явно указывать тип вашей переменной, так как Swift имеет довольно продвинутый тип вывода. Так что это должно работать:

struct Constants {
    static let gravity = 20
}

Ответ 4

struct Constants {
     static let varName = "AnyValue"
}

Доступ к varName:

Constants.varName