验证if语句语法

时间:2012-07-26 08:54:08

标签: objective-c cocoa

system1我想验证这种语法(按下无线电组时)。这种语法是否正确:

if([[sender selectedCell ] tag]==1) 
        [prefs addChild:element(@"System", [NSString stringWithUTF8String:"system1"])];
    if([[sender selectedCell] tag]==2) 
        [prefs addChild:element(@"system", [NSString stringWithUTF8String:"system2"])];
    if([[sender selectedCell] tag]==3) {        
        [advancedButton setEnabled:NO];

        [notifs addChild:element(@"UploadedFiles", [NSString stringWithUTF8String:"YES"])];
        [notifs addChild:element(@"DeletedFiles", [NSString stringWithUTF8String:"YES"])];

    }

2 个答案:

答案 0 :(得分:3)

是的,这是正确的。 tag属性只是NSInteger,因此您可以将其与1进行比较。

<小时/> 令人讨厌的注意事项:如果您尝试编译完全代码,则会产生错误,因为注释(//)适用于该行中的后续内容并包含右侧花括号( EDIT :OP编辑了这个问题,所以我的Geeky笔记不再适用了)

答案 1 :(得分:1)

if([[sender selectedCell] tag]==1) {/* do something */}

:)

尽管如此,它应该没问题。

魔鬼在这里的细节。 sender ist只是一个id对象,因此不超过NSObject *。您不能仅在没有类型转换或接收编译器警告的情况下访问该方法。使用ARC时甚至可能无法编译。

全面了解:

(IBAction) performMyAction:(id) sender {

  if ([sender isKindOfClass:[MyVeryOwnClass class]]) {

    MyVeryOwnClass myVeryOwnObject = (MyVeryOwnClass *) sender;

    if([[myVeryOwnObject selectedCell] tag]==1) {
      /* here goes the business logic */

     }
  }
}

还有其他方法可以实现同样的目标。您可以在不将其指定给临时对象引用的情况下对类型进行类型转换。或者您可以使用performToSelector:和performSelector来访问selectedCell。出于某种原因,我更喜欢这种方式。我觉得这很好读,调试很容易。

相关问题