2

我更像是一名 Android 开发人员,但我开始看到 iOS 开发隧道尽头的曙光。

但是,有一种编码模式我似乎找不到对应的。

使用静态字段作为标志。

安卓 :

public final static int ERROR_EMPTY = 1;
public final static int ERROR_NO_CONNECTION = 2;
public final static int ERROR_WRONG_USER = 4;

...

if (error == MyClass.ERROR_EMPTY) {//do things}

在 iOS 上实现这一目标的正确方法是什么?

谢谢。

4

2 回答 2

4

使用 Objective-C 和 C

我经常使用前缀:

typedef enum MyClass_Error {
  // never use MyClass_Error_Undefined
  // or you may favor MyClass_Error_None for a valid error code
  MyClass_Error_Undefined = 0,
  MyClass_Error_Empty = 1,
  MyClass_Error_NoConnection = 2,
  MyClass_Error_WrongUser = 4
  // ...
} MyClass_Error;

对于这些价值集合。然后您将获得诸如类型安全和switch值检查之类的好处。

对于非类型常量:

enum { MyClass_ConstantName = 4 };

并随时将这些隐藏在*.m私有时。

另请注意,Cenum可能在其定义的值中有间隙(与 Java 不同)。

更新:有一种更好的方法来声明一个枚举,如 Abizern 的回答所示——如果你坚持使用最新的工具链。使用此扩展的主要原因是为了二进制兼容性和编码(尽管出于这些目的我更喜欢固定宽度类型)。


对于要使用现有类型的情况,还有一些其他变体:

私有常量

我的班级.m

static const NSRange MyClass_InputRange = {1,1};

公共常量

我的类.h

extern const NSRange MyClass_InputRange;

我的班级.m

const NSRange MyClass_InputRange = {1,1};

使用 C++

您可能倾向于为这些值引入一个新的范围——在类或命名空间中,而不是使用前缀来模拟范围。

常见错误

  • 使用#definefor 常量(除非在预处理时必须定义)
  • 使用短标识符和没有前缀的标识符
  • static在标题中使用值
  • const尽可能使用
  • 当它们可以在*.m源中时,在标题中声明它们。
于 2012-08-08T09:30:44.300 回答
2

只是为了添加贾斯汀的优秀答案 - 枚举的现代 Objective-C 定义将是:

typedef enum MyClass_Error : NSUInteger {
  // never use MyClass_Error_Undefined
  // or you may favor MyClass_Error_None for a valid error code
  MyClass_Error_Undefined = 0,
  MyClass_Error_Empty = 1,
  MyClass_Error_NoConnection = 2
  // ...
} MyClass_Error;
于 2012-08-08T09:46:30.290 回答