ios - 相当于IOS中的静态字段

标签 ios static-members

我更像是一名 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/

相关文章:

c# - 如何在运行时在 visual studio 中查看静态变量的值

java - Java 中静态类变量的作用域

iphone - 你能告诉我在 Facebook 应用程序中用于屏幕导航的控件的名称是什么吗?

ios - 为 iOS 编译 C 源代码

ios - 完整背景一页第一个div介绍

ios - 在 RxSwift 中解析 JSON 并处理来自 API 的错误响应

iphone - 在 iOS6 中使用 JSON

c++ - 为什么初始化对象的两种不同方式给出不同的输出

java - 多线程处理中静态成员的意外行为

没有(或最少)全局广播的 Android 小部件交互