2014-01-15 34 views
2

我忙於嘗試將一些iOS代碼翻譯成Android代碼。 iOS的代碼包含枚舉,如下所示:將iOS Enums翻譯成Android

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

我從來沒有與枚舉之前在Android的工作,和我有麻煩解釋文件和可用的例子。我如何將上述示例轉換爲Android代碼?

+2

僅供參考,主要是從Java背景中讀取這個數據,enum是'Traits'。 'NS_OPTIONS'是一個宏 - 第一項是類型(這裏是整數),第二項是名稱。 – thegrinner

回答

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(); 
+0

這甚至沒有有效的(=可編譯的)代碼。 –

+0

好吧,你可以指出錯誤的位置 – thumbmunkeys

+1

我同意,對不起。在Java(以及Android)中,您不會將整數指定給'enum'成員。看看[這個線程](http://stackoverflow.com/questions/1681976/)。 Oracle提供了關於Java中的枚舉的[可理解的教程](http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)。 –

1

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(); 
+0

僅供參考,枚舉名稱應該是'Traits'。 'NS_OPTIONS'是一個宏。 – thegrinner

0

NS_OPTIONS的想法是允許枚舉值的所有可能組合由一個值表示(這就是爲什麼使用按位運算符)。在Java中,我猜相當於將是:

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

我們可以在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; 
+0

僅供參考,枚舉名稱應該是'Traits'。 'NS_OPTIONS'是一個宏。 – thegrinner