如何在Switch语句中使用谓词

时间:2014-03-18 21:26:36

标签: ios objective-c arrays uiwebview

(道歉,如果这是一个明显的答案,我对编程很新。)

我有一个用不同类型的结构定义的可变数组。我想要做的是将文本框中用户输入的字符串与数组中的对象进行比较。然后,根据字符串的值,我将在UIWebView中显示不同的图片。 (我使用数组的原因是因为我读过你不能用带字符串的Switch语句。)所以我设置了一个谓词来搜索数组。

但是,我无法弄清楚如何从谓词转到该对象的索引值,以便在switch语句中使用。

我应该遵循不同的策略吗?这甚至可能吗?

-(IBAction)btnAddFabric:(id)sender
 {

  myFabrics = [NSMutableArray arrayWithObjects:@"Cotton",@"Fleece",@"Linen",@"Nylon",
                      @"Polyester",@"Rayon",@"Silk",@"Spandex",@"Suede",@"Wool",nil];
  NSString *fabricType;

  fabricType = self.txtType.text;

  self.lblFabric1.text = fabricType;

  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains     
     %d",fabricType];
  NSArray *result = [myFabrics filteredArrayUsingPredicate:predicate];


  switch (result)
   {
     case 0:
      imageURLString=[[NSString alloc] initWithFormat:@"<Picture of cotton fabric from    
         Google here>"];
      break

   }

   [self.fabricPic loadRequest:[NSURLRequest requestWithURL:imageURL];
}

2 个答案:

答案 0 :(得分:1)

不要使用数组和switch语句,使用字典,其中键是您的结构类型/名称,关联的值是URL字符串。

现在,使用谓词来过滤密钥(使用allKeys来获取密钥数组),然后使用结果密钥从字典中获取URL字符串值。

另外,你真的需要使用谓词吗?考虑仅显示结构列表,例如在表视图中,并直接使用所选项来访问字典。如果你想要,你可以将一个搜索控制器添加到表视图中 - 这会将谓词重新置入,但要过滤到结果列表,而不是直接过滤到您当前正在尝试的结果。

答案 1 :(得分:1)

此处存在多个问题,包括:

  1. 将NSString传递给%d,使用%@而不是
  2. 将NSArray传递给切换,它只采用整数值
  3. 该查询取决于案例,并且不会匹配&#34;蓝棉&#34;
  4. 要修复它们,请尝试修改以适应。

    -(IBAction)btnAddFabric:(id)sender
    {
        NSArray*    myFabrics = @[@"Cotton",@"Fleece",@"Linen",@"Nylon",
                                  @"Polyester",@"Rayon",@"Silk",@"Spandex",@"Suede",@"Wool"];
    
        NSString *fabricType;
    
        fabricType = self.txtType.text;
    
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ CONTAINS[c] SELF",fabricType];
        NSArray *result = [myFabrics filteredArrayUsingPredicate:predicate];
    
        if(result.count != 0)
        {
            switch ([myFabrics indexOfObject:result[0]])
            {
                case 0:
                    imageURLString=[[NSString alloc] initWithFormat:@"<Picture of cotton fabric from Google here>"];
                    break;
    
            }
        }
        else
        {
            // do something because it doesn't match a known fabric type
        }
    
        [self.fabricPic loadRequest:[NSURLRequest requestWithURL:imageURL]];
    }