0

所以我的问题基本上是这样的,我正在解析一个可变的数字和字符串数组来尝试查找变量。我有一个私有辅助方法,它工作得很好,并且操作(@“+”、@“-”等)和变量(@“x”、@“y”等)之间存在差异。问题是,下面我的 else 块中的代码不起作用。我可以使用 @"x" 或 @"y" 进入 else 语句,但是我尝试创建的 NSSet 不起作用。我只是保持 NSLog(ging) “返回变量为空”。有任何想法吗?

+ (NSSet *)variablesUsedInProgram:(id)program
{

    NSMutableArray *stack;

    if([program isKindOfClass:[NSArray class]]){
        stack = [program mutableCopy];
    }

    NSSet *returnVariables = nil;

    for (int i=0; i<stack.count; i++) {
        if ([[stack objectAtIndex:i] isKindOfClass:[NSString class]]) {
            if ([self isOperation:[stack objectAtIndex:i]]) {
                continue;
            } else {
                returnVariables = [returnVariables setByAddingObject:[stack objectAtIndex:i]];
                if (returnVariables.count == 0) {
                    NSLog(@"returnVariables is empty");
                }
            }
        } 
    }

    return returnVariables;
}
4

1 回答 1

1

这是因为您没有初始化 returnVariables。更改此行:

NSSet *returnVariables = nil;

对此:

NSSet *returnVariables = [NSSet set];

-[NSSet setByAddingObject:]是一个实例方法,这意味着它将在 NSSet 的实例上调用。它并不是要从头开始创建一个新集合,而是使用您调用它的现有集合并创建一个新集合,该集合是该集合的副本,并添加了一个附加对象,并返回该新集合。

更好的是,使用 NSMutableSet:

NSMutableSet returnVariables = [NSMutableSet mutableSet];

// Inside your loop:
[returnVariables addObject:[stack objectAtIndex:i]];
于 2012-03-07T17:16:32.397 回答