0

我的类中有一个包含成分对象的 NSMutableArray。我想检查任何成分的名称属性是否与字符串匹配,但我无法完全正确地获取语法。

我真的很想念 Linq 和预测。

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

2 回答 2

0

改变

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

if ([ingredient.name isEqualToString:ingredientName])
于 2011-05-14T12:37:16.023 回答
0

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

object.property

或者:

[object property]

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

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

@property(nonatomic,readonly) NSString *name;

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

现在您的方法变为:

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

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

于 2011-05-14T12:37:34.593 回答