簡體   English   中英

評估int是否與定義的枚舉類型匹配

[英]Evaluate if int matches a defined enum type

我有一個枚舉typedef,其中包含幾個類型定義,例如:

ActionTypeSomething = 1,
ActionTypeSomethingElse = 2

等等。

因此,我編寫的方法將對傳遞的int求值,然后相應地返回一個值(例如,字符串)。

(NSString *)evaluatAndReturnProperResult:(int)typeID

NSString *repsonseString;

switch (typeID) 
    case actionTypeSomething: {
        responseString = @"an appropriate string for typeID"
    }
...

return responseString;

因此,我的交換機將評估每種受支持的類型並返回正確的字符串。

現在我的問題是:

我只想返回支持類型的字符串(即,理論上可以傳遞任何整數)。 如果沒有匹配,我返回nil。

顯然,我可以使用已經擁有的方法來執行此操作。 但是我(理論上)可以通過評估傳遞的int以查看它是否與我定義的任何枚舉類型匹配來提高性能,然后再通過switch發送它(該switch不是大規模的,但是我仍然寧願只返回nil如果我知道不會有匹配項,那么方法的開頭)。

我確信這很容易,有人可以建議在進入開關之前如何評估我傳遞的整數是否與任何定義的枚舉ActionType相匹配? 在這種情況下,我可能會過早地進行優化,但這更多地是關於如何實現它的一個普遍問題(而不是我是否應該這樣做)。

您可以再定義2個枚舉值:

typedef enum {
    ActionTypeMin = 1,
    ActionTypeSomething = 1,
    ActionTypeSomethingElse = 2,
    ActionTypeMax = 2
} ActionType;

然后檢查:

typeID >= ActionTypeMin && typeID <= ActionTypeMax

方法的參數不應為int,理想情況下應為您定義的枚舉。 這為您提供了一些編譯時檢查。

如果無法做到這一點,那么您在交換機中使用默認情況就可以很好地處理它-這就是它們的設計目的。

您正在使用TypeDef來將ActionEnum限制為一組值,因此,除了上層或下游通信外,您不應在程序中使用int。 有人甚至不會說,您應該獲取一個字符串並將其映射到枚舉,反之亦然。

在獲取字符串方面,通常的優化是從ActionType1到ActionTypeN包含字符串數組。 使用枚舉作為索引從數組中查找它。

該數組還可以使您將字符串映射到枚舉。

一個簡單的if語句,將枚舉強制轉換為與數組邊界相對應的整數,可以讓您優雅地處理一個不好的值,盡管對我而言,這應該引發一個大的異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM