一行中有多个函数调用

时间:2013-06-30 09:32:03

标签: ios objective-c

我正在将一个小的java库翻译成目标c。我在翻译以下内容时遇到了一些麻烦:

return other.tokens[0].equals(tokens[0]) &&
       other.tokens[1].equals(tokens[1]) &&
       other.tokens[2].equals(tokens[2]) &&
       other.tokens[3].equals(tokens[3]);

其他是类的实例,而令牌是一个字符串数组,它是同一个类的实例变量。到目前为止,我所拥有的是:

return ([other [[tokens[0] equals:tokens[0]]]] && 
        [other [[tokens[1] equals:tokens[1]]]] && 
        [other [[tokens[2] equals:tokens[2]]]] && 
        [other [[tokens[3] equals:tokens[3]]]]);

但我一直收到“预期标识符”错误,我相信这意味着我的语法有问题。

3 个答案:

答案 0 :(得分:1)

由于您在Quad类中使用了getToken方法,因此可以将其与以下实现一起使用。

return ([[other getTokens:0] isEqualToString: [self getTokens[0]] &&
       [[other getTokens:1] isEqualToString: [self getTokens[1]] &&
       [[other getTokens:2] isEqualToString: [self getTokens[2]] &&
       [[other getTokens:3] isEqualToString: [self getTokens[3]]);

答案 1 :(得分:0)

你可以轻松将生活中的四个条件分为4行:

BOOL b1=[other.tokens[0] isEqualTo:tokens[0]];
BOOL b2=[other.tokens[1] isEqualTo:tokens[1]];
BOOL b3=[other.tokens[2] isEqualTo:tokens[2]];
BOOL b4=[other.tokens[3] isEqualTo:tokens[3]];

return (b1 && b2 && b3 && b4);

此外,替代方法是遍历所有值,如果有FalseNO返回{/ p>}:

for(NSInteger i=0; i<4; i++){
    if(![other.tokens[i] isEqualTo:tokens[i]]){
         return NO;
    }
}
return YES;

阅读本文,因为我不确定你比较什么样的值(Object / NSString / Number等).. Implementing -hash / -isEqual: / -isEqualTo...: for Objective-C collections

答案 2 :(得分:0)

目标C中没有这样的方法“等于”。如果你正在进行字符串比较,那应该是

[[token objectAtIndex: 0] isEqualToString:[token objectAtIndex: 0]] 

但为什么要比较相同的字符串。