0

我有一个基本问题,并且是 Objective-C 的新手。

我有如下代码,有很多“如果”条件。我想增强这段代码。

我不能使用'switch-case',因为它(aNode)不返回整数。
它返回一个对象指针 (CC3Node*)。

有人可以建议我如何减少这些“if”语句并巧妙地增强此代码吗?

-(void) nodeSelected: (CC3Node*) aNode byTouchEvent: (uint) touchType at: (CGPoint) touchPoint {

    if ( aNode == [self getNodeNamed: A_NODE]  )
    {
        keyid =103; 
    }
    if ( aNode == [self getNodeNamed: B_NODE] )
    {
        keyid =105; 
    }
    if ( aNode == [self getNodeNamed: C_NODE] )
    {
        keyid =102; 
    }
    if ( aNode == [self getNodeNamed: D_NODE] )
    {
        keyid =104; 
    }
    if ( aNode == [self getNodeNamed: E_NODE] )
    {
        keyid =202; 
    }
    if ( aNode == [self getNodeNamed: F_NODE]  )
    {
        keyid =206; 
    }
    if ( aNode == [self getNodeNamed: G_NODE]  )
    {
        keyid =203; 
    }
    if ( aNode == [self getNodeNamed: H_NODE]  )
    {
        keyid =207; 
    }
    if ( aNode == [self getNodeNamed: I_NODE] )
    {
        keyid =208; 
    }
    if ( aNode == [self getNodeNamed: J_NODE] )
    {
        keyid =401; 
    }
    if ( aNode == [self getNodeNamed: K_NODE] )
    {
        keyid =402; 
    }
    if ( aNode == [self getNodeNamed: L_NODE])
    {
        keyid =404; 
    }

等等....

4

2 回答 2

4

您可以使用您的 nodeName:keyID 对创建一个字典,如下所示:

NSDictionary * dict = @{ @"A_NODE" : @103 , @"B_NODE" : @105 , ...}

而不是上面的一系列if语句,只需编写:

keyID = dict[aNode.name];

诶?

编辑:假设您name在节点对象上有一个属性或类似属性,如果不只是添加一个等。

编辑:明白了,我的第一个编辑是建议您将 CC3Node 子类化并在 CC3Node 上添加@property (nonatomic, strong) NSString * name或找到类似的“unique_id”并将其存储在字典中而不是名称中。

于 2013-07-18T21:15:04.190 回答
1

这在一定程度上取决于 的签名getNodeNamed:,但假设它是NSString,您可以创建一个字典,将节点名称映射到keyid以下方式:

NSDictionary *nodeToKey = @{
  A_NODE: @(103),
  B_NODE: @(105),
  C_NODE: @(102),
  D_NODE: @(104),
};

NSInteger keyid = 0;
for (NSString *node in nodeToKey) {
  if (aNode == [self getNodeNamed:node]) {
    keyid = [nodeToKey[node] integerValue];
    break;
  }
}

// Optional: do something if keyid wasn't found.

当然,如果你可以避免getNodeNamed:每次调用(取决于实现),你可以NSDictionary直接使用keyid.

于 2013-07-18T21:15:20.003 回答