【问题标题】:Writing a for loop in Objective C way用Objective C方式编写for循环
【发布时间】:2012-08-29 13:53:27
【问题描述】:

我对用 Objective C 方式编写 for 循环有疑问。我可以在传统 C for 循环中执行相同的循环,但是我正在尝试学习 Objective C。这是我的问题。
listdata 是一个可变数组,包含 ofi_vc_modal_ab_user_info 对象的对象,我想将列表数据的每个电子邮件与电子邮件进行比较,直到列表数据计数并找到它的位置,如果找到我想从列表数据中删除该对象。

    for (ofi_vc_modal_ab_user_info *loc_obj in listData)
    {
        if (strcasecmp(loc_obj->email, email) == 0) {
           // What need to do here.
        }
    }

如何在此处继续...感谢您的帮助:)

【问题讨论】:

  • 我知道您已经有一个公认的答案,但您应该查看现在可用于大多数集合对象的“枚举...带块”方法。 Apple 每年都会在 WWDC 上告诉我们,这些会导致代码更少,面积也更快。

标签: iphone objective-c ios xcode cocoa-touch


【解决方案1】:

你可以使用 C 的 for。

事实上,在使用for (e in collection)时,对你迭代的集合进行变异是错误的。

【讨论】:

  • 贾斯汀我已经按照 Born 和 Prince 的建议做了,它看起来适合我的情况。
  • @user1587011 如果 BornCoder 的方法适合您,请随时接受 BornCoder 的回答。
【解决方案2】:
BOOL foundObject = NO; 
ofi_vc_modal_ab_user_info *loc_found_obj = nil; 
for (ofi_vc_modal_ab_user_info *loc_obj in listData)
{
    if (strcasecmp(loc_obj->email, email) == 0) {
       // Set your flag here
       loc_found_obj = loc_obj;
        foundObject = YES;
        break;
    }
}
if(foundObject) {
// Do your stuffs as object is found
// Your found object is in loc_found_obj
 [listData removeObject:loc_found_obj];
}

我希望下面的代码能解释你想要什么。如果您需要更多帮助,请解释一下。

编辑:如果您使用的是NSMutableArray,那么您不需要对象的索引。您可以直接删除我编辑的代码中提到的对象。

【讨论】:

  • BornCoder 如何在此处删除索引处的对象?
  • 是的,谢谢,贾斯汀怎么说这是一个错误,我在一个苹果文档中看到了类似的方法。
  • 你的意思是它报错了吗?它不应该给出任何错误。请解释它给出了什么样的错误。
  • 根据贾斯汀的评论,请检查他的评论,在我的情况下它工作正常。
  • 不好的方法当你在做for (ofi_vc_modal_ab_user_info *loc_obj in listData) 时,你不能从listData 中删除对象... 错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 2014-09-28
  • 2010-12-26
  • 2023-03-03
相关资源
最近更新 更多