如何捕获状态 - 比 BOOL 更灵活,但比 NSString 更独特

Posted

技术标签:

【中文标题】如何捕获状态 - 比 BOOL 更灵活,但比 NSString 更独特【英文标题】:How to capture state - More flexible than BOOL but more distinct than NSString 【发布时间】:2013-03-29 13:57:19 【问题描述】:

我正在调用一个方法来设置状态,在本例中为 animateState。状态参数可以是定义的集合之一:例如“隐藏”、“显示”、“活动”、“不活动”。所以它不仅仅是 BOOL,但比开放的 NSString 更独特。

目前我正在通过使用 NSString 来解决这个问题,并使用它的 isEqual 方法检查状态。它工作正常,但并不理想。

-(void) animateState:(NSString*)state
    if ([state isEqual:@"hide"])
...
     else if ([state isEqual:@"show"])
...
     else if ([state isEqual:@"active"])
...
     else if ([state isEqual:@"inactive"])
...
    

如何限制参数并最终提高 if/switch 检查的效率?这种情况有什么最佳实践吗?

【问题讨论】:

nshipster.com/ns_enum-ns_options 【参考方案1】:

enum 在这里会做得很好,在头文件的某处定义 enum

typedef enum
    AnimateStateHide,
    AnimateStateShow,
    AnimateStateActive,
    AnimateStateInactive
 AnimateState;

然后你可以像这样调用你的方法:

-(void) animateState:(AnimateState)state
    switch(state) 

        case AnimateStateHide:
            //Code here;
            break;

        case AnimateStateShow:
            //Code here;
            break;

        case AnimateStateActive:
            //Code here;
            break;

        case AnimateStateInactive:
            //Code here;
            break;
    

【讨论】:

以上是关于如何捕获状态 - 比 BOOL 更灵活,但比 NSString 更独特的主要内容,如果未能解决你的问题,请参考以下文章

为啥 std::optional<int> 的构造比 std::pair<int, bool> 更昂贵?

数据库:触发器

寒门难在出贵子

F5 BIG-IPLTM但比组网的三种连接模式(转)

Mysql中如何查看慢查询以及查看线程

请问Ubuntu操作系统 挂起和休眠有啥区别?哪个更省电