【问题标题】:Looping through an array of dynamic objects循环遍历动态对象数组
【发布时间】:2013-12-11 21:52:48
【问题描述】:

我不太确定如何准确地描述我想要做什么 - 我能做的最好的就是提供一些代码作为示例:

- (void) doStuffInLoopForDataArray:(NSArray *)arr forObjectsOfClass:(NSString *)class
{

    for ([class class] *obj in arr)
    {

        // Do stuff

    }

}

所以我可以这样称呼

NSArray *arr = [NSArray arrayWithObjects:@"foo",@"bar", nil];
[self doStuffInLoopForDataArray:arr forObjectsOfClass:@"NSString"];

我希望代码像我写的一样被执行

- (void) doStuffInLoopForDataArrayOfStrings:(NSArray *)arr
{

    for (NSString *obj in arr)
    {

        // Do KVC stuff

    }

}

有没有办法得到这种行为?

【问题讨论】:

    标签: ios objective-c kvc


    【解决方案1】:

    我认为将class 传递给该方法没有多大意义。运行你的循环:

    for (id obj in arr) {
    

    并检查您要调用的方法是否存在。仅当您想检查数组中的对象是否确实属于该类时,传递该类才真正有用,但是您无法对这些信息做太多事情。

    【讨论】:

      【解决方案2】:

      另一种方法是创建一个超类,我想使用此方法继承的所有类。然后我可以循环使用那个超类。

      因此,如果我希望能够循环访问MyObject1MyObject2,我可以创建一个BigSuperClass,其中MyObject1MyObject2 都是BigSuperClass 的子类。

      - (void) doStuffInLoopForDataArray:(NSArray *)arr
      {
      
          for (BigSuperClass *obj in arr)
          {
      
              // Do stuff
      
          }
      
      }
      

      此循环适用于 MyObject1 对象数组、MyObject2 对象数组或 BigSuperClass 对象数组。

      我对此思考得越多,我就越倾向于这是最好的方法。因为我可以使用我感兴趣的所有@propertys 和方法设置我的BigSuperClass 作为我的// Do Stuff 的一部分,这意味着我不必像其他答案一样检查respondsToSelector。这种方式感觉不那么脆弱。

      【讨论】:

        【解决方案3】:

        我在输入这个问题时想出了一个主意,我想我还是完成它吧。我只需要改变我的循环方式,我真的不需要在课堂上发送。

        - (void) doStuffInLoopForDataArray:(NSArray *)arr
        {
        
            for (int i=0; i < [arr count]; i++)
            {
        
                // Do stuff
        
            }
        
        }
        

        我应该注意,我的// Do stuff 的一部分在我实际尝试对它做任何事情之前检查以确保if ([[arr objectAtIndex:i] respondsToSelector:...]) - 据我所知,这应该可以防止任何令人讨厌的崩溃。

        【讨论】:

          猜你喜欢
          • 2019-06-01
          • 2018-09-26
          • 2016-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-28
          • 2017-01-29
          • 2015-10-15
          相关资源
          最近更新 更多