标签: fast-enumeration

enumerateObjectsUsingBlock的BOOL*stop参数是什么:用于?

我最近一直在使用enumerateObjectsUsingBlock:很多我的快速枚举需求,而且我很难理解BOOL *stop枚举块中的用法.

NSArray类引用状态

stop:对布尔值的引用.该块可以将值设置YES为停止进一步处理数组.这个stop论点是一个唯一的论点.您应该只将此布尔值设置YES为块内.

那么当然我可以在我的块中添加以下内容来停止枚举:

if (idx == [myArray indexOfObject:[myArray lastObject]]) {
    *stop = YES;
}
Run Code Online (Sandbox Code Playgroud)

从我能够说的,没有明确设置*stopYES没有任何负面的副作用.枚举似乎在数组的末尾自动停止.那么*stop在一个区块中使用真的有必要吗?

cocoa-touch enumeration objective-c nsarray fast-enumeration

85
推荐指数
1
解决办法
3万
查看次数

快速枚举nil对象

这会发生什么?安全吗?

NSArray *nullArray=nil;
for (id obj in nullArray) {
  // blah
}
Run Code Online (Sandbox Code Playgroud)

更具体地说,我必须这样做:

NSArray *array=[thing methodThatMightReturnNil];
if (array) {
  for (id obj in array) {
    // blah
  }
}
Run Code Online (Sandbox Code Playgroud)

或者这样好吗?:

for (id obj in [thing methodThatMightReturnNil]) {
  // blah
}
Run Code Online (Sandbox Code Playgroud)

objective-c fast-enumeration

41
推荐指数
2
解决办法
4603
查看次数

Objective-C中的快速枚举是否保证了迭代的顺序?

我能指望它从数组的开头到结尾的顺序吗?在文档中找不到任何关于此的内容.

即是

for (id val in array)
{
   NSLog(@"%@", val);
}
Run Code Online (Sandbox Code Playgroud)

总是打印出来的

for (int i = 0; i < [array count]; ++i)
{
   NSLog(@"%@", [array objectAtIndex:i]);
}
Run Code Online (Sandbox Code Playgroud)

arrays iteration objective-c fast-enumeration

34
推荐指数
1
解决办法
4234
查看次数

在快速枚举中跟踪索引

我想在使用快速枚举时得到当前对象的索引,即

for (MyClass *entry in savedArray) {
// What is the index of |entry| in |savedArray|?
}
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c fast-enumeration

28
推荐指数
3
解决办法
1万
查看次数

循环遍历子视图以检查空的UITextField - Swift

我想知道如何将下面的客观c代码转换成swift.

这将遍历我想要的视图上的所有子视图,检查它们是否是文本字段,然后检查它们是否为空.

for (UIView *view in contentVw.subviews) {
    NSLog(@"%@", view);
    if ([view isKindOfClass:[UITextField class]]) {
        UITextField *textfield = (UITextField *)view;
        if (([textfield.text isEqualToString:""])) {
            //show error
            return;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这里是我快速翻译的地方:

for view in self.view.subviews as [UIView] {
    if view.isKindOfClass(UITextField) {
        //...

    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒!

for-loop fast-enumeration ios swift

27
推荐指数
2
解决办法
2万
查看次数

检查数组是否包含另一个数组的相同对象的最快方法

目标是比较两个数组并检查它们是否包含相同的对象(尽可能快 - 数组中有很多对象).无法检查数组,isEqual:因为它们的排序方式不同.

我已经尝试过这里发布的解决方案(/sf/answers/79689221/ - 请参阅Peter Hosey发布的帖子的最后一个代码片段).但这不适用于不同排序的数组.

我现在使用的代码如下:

+ (BOOL)arraysContainSameObjects:(NSArray *)array1 andOtherArray:(NSArray *)array2 {
    // quit if array count is different
    if ([array1 count] != [array2 count]) return NO;

    BOOL bothArraysContainTheSameObjects = YES;
    for (id objectInArray1 in array1) {
        BOOL objectFoundInArray2 = NO;
        for (id objectInArray2 in array2) {
            if ([objectInArray1 isEqual:objectInArray2]) {
                objectFoundInArray2 = YES;
                break;
            }
        }
        if (!objectFoundInArray2) {
            bothArraysContainTheSameObjects = NO;
            break;
        }
    }

    return bothArraysContainTheSameObjects;
}
Run Code Online (Sandbox Code Playgroud)

这有效,但这些是两个嵌套的快速枚举.有没有办法做更快的比较?

objective-c nsarray fast-enumeration ios

24
推荐指数
2
解决办法
3万
查看次数

如何实现NSFastEnumeration协议?

我有一个班级,我希望我的班级确认NSFastEnumeration协议.我已阅读文档,但不是很清楚.有人可以告诉我协议方法应该返回什么以及它是如何工作的?

cocoa objective-c fast-enumeration

22
推荐指数
1
解决办法
6462
查看次数

使用快速枚举和NSDictionary,不能保证按键的顺序迭代 - 我怎样才能按顺序进行迭代?

我正在与一个API进行通信,该API将我的应用程序所需的数据作为响应发送回NSDictionary(数据基本上是一个提要).此数据按最新到最旧排序,最新项目位于NSDictionary的前面.

当我快速枚举它们时for (NSString *key in articles) { ... },顺序似乎是随机的,因此我操作它们的顺序不是从最新到最旧,就像我想要的那样,而是完全随机的.

我已经读过了,当使用NSDictionary的快速枚举时,不保证按顺序迭代通过数组.

但是,我需要它.如何按NSDictionary所在的顺序迭代NSDictionary?

objective-c nsdictionary fast-enumeration for-in-loop ios

13
推荐指数
2
解决办法
2万
查看次数

目标c"为每个"(快速枚举) - 收集评估?

从实验看,集合表达式只被评估一次.考虑这个例子:

static NSArray *a;

- (NSArray *)fcn
{
    if (a == nil)
        a = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
    NSLog(@"called");
    return a;
}

...

for (NSString *s in [self fcn])
    NSLog(@"%@", s);
Run Code Online (Sandbox Code Playgroud)

输出是:

2010-10-07 07:37:31.419 WidePhotoViewer Lite[23694:207] called
2010-10-07 07:37:31.420 WidePhotoViewer Lite[23694:207] one
2010-10-07 07:37:31.425 WidePhotoViewer Lite[23694:207] two
2010-10-07 07:37:31.425 WidePhotoViewer Lite[23694:207] three
Run Code Online (Sandbox Code Playgroud)

表示[self fcn]只被调用一次.

任何人都可以确认这是指定的(而不仅仅是观察到的)行为吗?

我的想法是做这样的事情:

for (UIView *v in [innerView subviews]) {
Run Code Online (Sandbox Code Playgroud)

而不是这个:

NSArray *vs = [innerView subviews];
for (UIView *v in vs) {
Run Code Online (Sandbox Code Playgroud)

思考?

iphone foreach objective-c fast-enumeration

11
推荐指数
2
解决办法
2万
查看次数

快速枚举与Objective-C中的NSEnumerator

我一遍又一遍地看到这一点,为什么在循环中使用快速枚举而不是NSEnumerator使用它更快nextObject:.

nsenumerator objective-c fast-enumeration

10
推荐指数
1
解决办法
4286
查看次数