【问题标题】:Objective C: Accessing constants from other classes目标 C:从其他类访问常量
【发布时间】:2011-11-27 21:07:45
【问题描述】:

我在一个类中有一个常量,我想从另一个类中访问它。 我想访问这些:

#define kStateRunning 1
#define kStateGameOver 2
#define kStateMenu 3

在我的GameController.h 中来自Level1.m。在Level1.h 我有@class GameController 以及实现文件中的导入。

我尝试寻找答案,但我不确定我的措辞是否正确。

【问题讨论】:

  • 如果常量在 gamecontroller.h 中,并且您在 level1.m 中导入,它们应该可用。你是在问你做得对还是没有工作?
  • 有些东西不见了。如果常量是在GameController.h 中定义的,那么要访问它们为什么不只是#import GameController.h

标签: iphone objective-c ios class constants


【解决方案1】:

如果您使用#define myConstantmyConstant 将在您导入文件后被识别。例如,在导入和 @Interface 之间的 GameController.h 开头定义它们。

然后,如果您在其他文件之一中导入 GameController.h(我们以 Level1.m 为例)。您可以使用它,而无需为其添加前缀。只需使用myConstant

【讨论】:

  • 我一直在尝试添加前缀,这是我的问题
  • 如果你使用#define,它不是类的一部分。例如,您可以拥有一个包含所有已定义常量的文件,而该文件中没有类。
【解决方案2】:

我不会使用#define,因为您会丢失编译器的任何检查。通常,您使用常量来避免在整个代码中使用可能拼写错误或输入错误的魔法值。

Coding Guidelines 的 Apple 文档中,它们告诉您应该如何处理每种类型的常量。

对于像你这样的简单整数,他们建议enums 是最好的选择。它们在 Apple 框架中广泛使用,因此您知道它们很好。

您仍然需要在标题中定义它。

例如(使用你自己的前缀而不是PS

typedef enum {
    PSGameStateRunning  = 1,
    PSGameStateGameOver,
    PSGameStateMenu,
} PSGameState;

这也有一个优点,即您可以在需要时将其传递给函数/从函数返回

【讨论】:

    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 2013-09-13
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多