检查NSMutableArray中的值

时间:2011-05-14 12:22:17

标签: iphone cocoa-touch objective-c++ iso

我的班级中有一个包含Ingredient对象的NSMutableArray。我想检查任何成分的 name 属性是否与字符串匹配,但我无法正确理解语法。

我真的很想念Linq并预测。

-(BOOL) hasIngredient:(NSString *)ingredientName{
    for (Ingredient *ingredient in ingredients) {
        //if([ingredient isKindOfClass:[Ingredient class]]){
            if ([ingredient->name isEqualToString:ingredientName]) {
                return YES;
            }
        //}
    }
                 return NO;
}

2 个答案:

答案 0 :(得分:0)

更改

if ([ingredient->name isEqualToString:ingredientName])

if ([ingredient.name isEqualToString:ingredientName])

答案 1 :(得分:0)

foo->bar语法直接访问实例变量。你不应该这样做。访问属性的语法是:

object.property

或:

[object property]

访问属性始终是方法调用。如果您有一个属性foo并执行@synthesize foo;,则编译器会生成一个名为foosetFoo:的方法(如果该属性不是只读的话)。

所以你应该有类似的东西:

@property(nonatomic,readonly) NSString *name;

如果您希望名称可更改,请将readonly替换为copy(使用copy代替retain的原因是因为您可以传递可变字符串然后稍后修改那个可变字符串,这肯定会产生意想不到的结果;你可以通过复制来避免这种情况。

现在你的方法变为:

-(BOOL) hasIngredient:(NSString *)ingredientName{
    for (Ingredient *ingredient in ingredients) {
        if ([[ingredient name] isEqual:ingredientName]) {
            return YES;
        }
    }
    return NO;
}

而不是[ingredient name]你也可以在这里写ingredient.name,但我个人更喜欢前者,因为后者也用于访问“便宜”的结构成员,而总是访问一个属性涉及方法调用,因此“更昂贵”。但那只是品味问题。