如果drawRect中的语句问题

时间:2012-02-21 23:21:58

标签: ios cocoa-touch if-statement

是的,是的。对我感到羞耻。我想在UIView中画画,我的代码是:

NSString *str;

if(kmObj.metal!=@"" && kmObj.metalName2!=@"" && kmObj.metalname3!=@"")
{
   str=[NSString stringWithFormat:@"%@ + %@ + %@",kmObj.metal,kmObj.metalName2,kmObj.metalname3]; 
}
if(kmObj.metal!=@"" && kmObj.metalName2!=@"" && kmObj.metalname3==@"")
{
   str=[NSString stringWithFormat:@"%@ + %@",kmObj.metal,kmObj.metalName2]; 
}
if(kmObj.metal!=@"" && kmObj.metalName2==@"" && kmObj.metalname3==@"")
{
   str=[NSString stringWithFormat:@"%@",kmObj.metal]; 
}
[str drawAtPoint:CGPointMake(10.0,234.0)
                forWidth:200
                withFont:[UIFont systemFontOfSize:20.0]
             minFontSize:20.0
          actualFontSize:NULL
           lineBreakMode:UILineBreakModeTailTruncation 
      baselineAdjustment:UIBaselineAdjustmentAlignBaselines];

因此,此代码假设检查Object是否包含多个金属名称记录。如果是这样,它必须格式化字符串形式:Au + Ag + Cu ...我的问题是在输出绘制中我无法摆脱我不需要它们的+符号。我的if语句有什么问题吗?

3 个答案:

答案 0 :(得分:2)

而不是if (string != @""),请使用![string isEqualToString:@""]([string length] > 0)。您需要确保执行比较,而不是指针比较。

无论如何,我会写这样的代码:

NSString *outputString = @"";

if ([firstString length] > 0) {
    outputString = [outputString stringByAppendingString:firstString];
}

if ([secondString length] > 0) {
    outputString = [outputString stringByAppendingFormat:@" + %@", secondString];
}

if ([thirdString length] > 0) {
    outputString = [outputString stringByAppendingFormat:@" + %@", thirdString];
}

使用这种技术,您可以单独检查每个字符串,只有在知道其他有效字符串后才会包含加号。

答案 1 :(得分:1)

字符串比较应采用以下形式:[stringA isEqualToString:stringB]

来自文档:When you know both objects are strings, this method is a faster way to check equality than isEqual:

另外,==对于字符串来说很奇怪 - 它们都是非基元的,你想要进行值比较。

另外,您应该考虑使用nil和/或[NSNull null]的可能性(取决于这些值的来源)。您当前对它们是否等于空字符串的测试不会考虑到这一点。

答案 2 :(得分:0)

你的意思是你不想要“+”号吗?然后不要把它放在你的NSString中。

所以而不是

str = [NSString stringWithFormat:@"%@ + %@ + %@",kmObj.metal,kmObj.metalName2,kmObj.metalname3];

DO

str = [NSString stringWithFormat:@"%@ %@ %@",kmObj.metal,kmObj.metalName2,kmObj.metalname3];

还可以使用[kmObj.metal isEqualToString:@""]进行字符串比较