我更像是一名 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 上实现此目标的正确方法是什么?
谢谢。
最佳答案
使用 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;
对于这些值(value)集合。然后您将获得类型安全和switch
值检查等好处。
对于非类型常量:
enum { MyClass_ConstantName = 4 };
并在私有(private)时随意将它们隐藏在 *.m
中。
另请注意,C enum
的定义值可能存在间隙(与 Java 不同)。
更新:如 Abizern 的回答所示,还有一种更好的声明枚举的方法——如果您坚持使用最新的工具链。使用此扩展的一个重要原因是为了二进制兼容性和编码(尽管出于这些目的我更喜欢固定宽度的类型)。
还有一些其他变体,用于您想要使用现有类型的情况:
私有(private)常量
MyClass.m
static const NSRange MyClass_InputRange = {1,1};
公共(public)常量
我的类.h
extern const NSRange MyClass_InputRange;
MyClass.m
const NSRange MyClass_InputRange = {1,1};
使用 C++
您可能更愿意为这些值引入一个新范围——在类或命名空间中,而不是使用前缀模拟范围。
常见错误
- 对常量使用
#define
(除非在预处理时必须定义) - 使用短标识符和没有前缀的标识符
- 在 header 中使用
static
值 - 不尽可能使用
const
- 当它们可以在
*.m
源代码中时,在 header 中声明它们。
关于ios - 相当于IOS中的静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11861277/