2012-08-08 88 views
2

我更像是一名Android開發人員,但我開始在iOS開發的隧道盡頭看到了光明。相當於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

使用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; 

這些收藏價值。那麼您將獲得類型安全和價值檢查等好處。

非類型常量:

enum { MyClass_ConstantName = 4 }; 

,並隨時在*.m隱藏這些祕密的進行。

還注意到C enum可能在其定義的值中存在差距(與Java不同)。

更新:有一個更好的方法來聲明一個枚舉,如Abizern的答案所示 - 如果你堅持使用最新的工具鏈。使用這種擴展的重要原因是二進制兼容性和編碼(儘管我喜歡用於這些目的的固定寬度類型)。


還有一些其他變化,對於情況下,當你想使用現有的類型:

私人恆

MyClass.m

static const NSRange MyClass_InputRange = {1,1}; 

衆恆

MyClass.h

extern const NSRange MyClass_InputRange; 

MyClass.m

const NSRange MyClass_InputRange = {1,1}; 

使用C++

你可能會贊成引入一個新的範圍,這些價值觀 - 無論是在一類或名稱空間,而不是使用前綴模擬範圍。其未在標頭前綴使用static

  • 常見錯誤

    • 爲常量使用#define(除非定義是強制性的預處理時)
    • 使用短標識符和標識符
    • 不是使用const時儘可能
    • 聲明它們在標題中,當它們可能位於*.m源中時。
  • +0

    感謝賈斯汀。你的答案的第一部分就是我正在尋找的東西。更新完全失去了我。在這種情況下,NSRange的使用確實很少見。 – Yahel 2012-08-08 10:11:04

    +0

    附加問題:你說這是一個常見的錯誤,不使用const.Can我們可以const枚舉? – Yahel 2012-08-08 10:11:53

    +0

    @Yahel'NSRange'示例對於錯誤代碼不會有用。然而,當你想聲明一個'struct'(不能用'enum'表示)的常量時,這個例子很有用。 – justin 2012-08-08 10:18:05

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

    +1注意到很好的新語言擴展 – justin 2012-08-08 09:48:58

    +0

    你能告訴我,新類型增加了什麼好處?它是某種類型的執行還是允許創建包含NsStrings的枚舉? – Yahel 2012-08-08 10:13:32

    +0

    更好的代碼完成 - 以及更強大的類型檢查。 – Abizern 2012-08-08 10:21:45