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"])];
}
答案 0 :(得分:3)
是的,这是正确的。 tag
属性只是NSInteger
,因此您可以将其与1进行比较。
答案 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。出于某种原因,我更喜欢这种方式。我觉得这很好读,调试很容易。