【问题标题】:Translating iOS Enums to Android将 iOS 枚举转换为 Android
【发布时间】:2014-01-15 20:07:42
【问题描述】:

我正忙于将一些 iOS 代码转换为 Android 代码。 iOS 代码包含枚举,如下所示:

typedef NS_OPTIONS(NSUInteger, Traits) {
    TraitNumberOne = 1<<0,
    TraitNumberTwo = 1<<1,
);

我之前从未在 Android 中使用过 Enums,并且无法解释可用的文档和示例。如何将上述示例转换为 Android 代码?

【问题讨论】:

  • 仅供以 Java 为背景的读者参考,枚举为 TraitsNS_OPTIONS 是一个宏 - 第一项是类型(此处为整数),第二项是名称。

标签: android ios enums


【解决方案1】:

使用这个

public enum NS_OPTIONS {

    TraitNumberOne (1<<0),
    TraitNumberTwo (1<<1);

    private final int Option;

    public int getOption()
    {
         return Option;
    }

    private NS_OPTIONS(int option) {
       this.Option= option;
    }
}

像这样使用它:

   int value = NsOptions.TraitNumberOne.getOption();

【讨论】:

  • 我同意,很抱歉。在 Java(以及 Android)中,您不会将整数分配给 enum 成员。看看this thread。 Oracle 在 Java 中提供了一个关于 enums 的 comprehensible tutorial
  • 我试过这个设置,但它确实不起作用。我实际上认为 Oracle 教程不是那么清楚
  • @still_learning 谢谢,我以为你的意思是小错字,但这确实是错误的
  • @Zero 我个人认为(几乎)没有一个 Oracle 教程是清晰完整的,但它们可以帮助您入门。
  • 我花了一段时间才理解这个概念,但它现在可以工作了 :) 。感谢大家的帮助!
【解决方案2】:

Java 枚举相对简单,但可以变得更复杂,以满足您想要使用它们的任何需求。如果你只想要枚举的类型安全,你可以像这样声明变量名:

public enum Traits{
    TraitNumberOne,
    TraitNumberTwo
}

如果您想要枚举的更高级功能,则可以将其视为为枚举中的每个项目静态实例化的类。因此,您可以有一个构造函数并输入您想要与每个单独项目关联的任何值,如下所示:

public enum Traits{
    TraitNumberOne(0x01),
    TraitNumberTwo(0x02),

    // future items go here
    ;  // don't forget the semi-colon, which indicates the list of items is ending

    // now, create a private variable to store the data
    private final int data;

    // and the constructor to set the data
    private NsOptions(int data){
        this.data = data;
    }

    // now, you can provide an accessor to provide access to the data
    public int getData(){
        return this.data;
    }
}

你可以像这样使用上面的枚举:

Traits currentOptions = Traits.TraitNumberOne;
int optionsData = currentOptions.getData();

【讨论】:

  • 仅供参考,枚举名称应为TraitsNS_OPTIONS 是一个宏。
【解决方案3】:

NS_OPTIONS 的想法是允许枚举值的所有可能组合由一个值表示(这就是使用位运算符的原因)。在 Java 中,我想等价的应该是:

public enum Permission {
    TraitNumberOne (0b01),
    TraitNumberTwo (0b10);
...
}

【讨论】:

    【解决方案4】:

    我们可以在android中实现,

           public enum NS_OPTIONS{
                 TraitNumberOne(1),TraitNumberTwo(2);
    
                 private int type;
    
                 NS_OPTIONS(int type){
                     this.type = type;
                 }
    
                 public int getType(){
                      return type;
                  }
    
        }
    

    如果你想在你的班级中使用上面的枚举,你可以像这样使用它,

          int i =NS_OPTIONS.TraitNumberOne;//which will return 1
          int j =NS_OPTIONS.TraitNumberTwo;//which will return 2;
    

    【讨论】:

    • 仅供参考,枚举名称应为TraitsNS_OPTIONS 是一个宏。
    猜你喜欢
    • 1970-01-01
    • 2020-08-21
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多