Xcode 2样式Qs:有没有理由不重复使用标签?切换语句大括号?
嘿,这里有堆栈溢出!如果你不理解我的问题,请随意跳过代码;这或多或少只是为偶然发现这一线索的学习者提供一些代码 1) 重复使用标签是不是很糟糕 2) 对于switch语句,在每种情况下始终使用大括号是一种好的做法吗?我这样做是因为我很清楚旧的ARC更改会导致“switch case在保护范围内”错误,当您在case块中分配变量时会发生这些错误。我问的原因与#1相同:我希望在不养成不良风格习惯的情况下收紧代码 我只是快速编写这个示例来涵盖这两个方面,所以请原谅打字错误/等等: 登录名Xcode 2样式Qs:有没有理由不重复使用标签?切换语句大括号?,xcode,login,tags,styles,reusability,Xcode,Login,Tags,Styles,Reusability,嘿,这里有堆栈溢出!如果你不理解我的问题,请随意跳过代码;这或多或少只是为偶然发现这一线索的学习者提供一些代码 1) 重复使用标签是不是很糟糕 2) 对于switch语句,在每种情况下始终使用大括号是一种好的做法吗?我这样做是因为我很清楚旧的ARC更改会导致“switch case在保护范围内”错误,当您在case块中分配变量时会发生这些错误。我问的原因与#1相同:我希望在不养成不良风格习惯的情况下收紧代码 我只是快速编写这个示例来涵盖这两个方面,所以请原谅打字错误/等等: 登录名 -(void
-(void)irrelevantSignInMethod
{
//Failed login
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry!" message:@"Log in failed" delegate: self cancelButtonTitle:@"OK" otherButtonTitles:@"Try Again", nil];
[alert show];
[alert setTag:1];
...
//Confirmed login
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sweet!" message:@"You've logged in!" delegate: self cancelButtonTitle:@"Sweet!" otherButtonTitles:nil, nil];
[alert show];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:signInUsername.text forKey:@"username"];
[defaults synchronize];
[alert setTag:2];
}
-(void)irrelevantSignUpThenInMethod
{
....
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sweet!" message:@"You've registered and logged in!" delegate: self cancelButtonTitle:@"Sweet!" otherButtonTitles: nil];
[alert show];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[alert setTag:3];
//Just here to remind code-borrowers to store username somewhere
[defaults setObject:signInUsername.text forKey:@"username"];
[defaults synchronize];
//Here's where the question lies; is there any reason to not tweak to [alert setTag:2], shaving an if statement in the clickButtonAtIndex method?
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch (alertView.tag)
{
case 1:
{
([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Try Again"]))
{
//I always add an alert with "Try Again" in case the log in failed
UITextField *username = [alertView textFieldAtIndex:0];
UITextField *password = [alertView textFieldAtIndex:1];
signInUsername.text = username.text;
signInPassword.text = password.text;
[self attemptSignIn];
break;
}
}
case 2:
{
[self loggedIn];
break;
}
case 3:
{
//Here's where question #1 lies; is there any reason to not just assign both alerts the same tag (2) earlier and not need a 3rd case?
[self loggedIn];
break;
}
case 4:
{
//Forgot password scenario. Too lazy to write how I do this out - but will answer if anyone PMs me - those borrowing this code should be prepared for this situation!
break;
}
default:
{
break;
}
}
}
是的,我意识到代码可能不是必需的——但是谁知道呢,有些人可能会从基本的登录结构中受益。如果我之前不清楚,我会详细说明我的问题:我可以继续分配标记2两次并简化ClickedButtonIndex方法吗?我是计算机科学专业的学生,过去几个学期我都学过这门课,所以我想不起来是否有任何澄清。我怀疑是否存在区分的技术原因,我只关注简洁的代码,但我不想开始养成打破“这是经典方式”的习惯;尤其是当我在风格和与他人合作完成更大的项目时。我知道这是一个很小的问题,但我想知道大多数人是怎么做的,我很想与你的专家进行对话。至于切换括号的问题:我知道这可以被视为偏好(你们中的一些人代码“尽可能简洁”,而其他人代码“尽可能一致”)。。。我只是好奇老练的兽医们认为什么应该是“现状”
3) 我知道这是糟糕的(编辑:糟糕)礼节,但我希望至少有一次“投票”,所以我有资格开始“投票”,因为我每天无数次地使用来自其他线程的知识,作为一个超过五年的潜伏者,我觉得是时候开始用如此宝贵的互联网点数奖励那些有帮助的人了
谢谢你的时间。您确实是理解概念、发现解决方案和开发开发人员的最佳人选。如果重用标记,我认为您无法识别ClickedButtonIndex委托方法中的哪个警报视图 在包含具有相同标记的子视图的视图中使用viewWithTag函数时,也可能会出现问题 对我来说,最好为标签定义一些常量,这样你可以更容易地查看代码,例如3设置为不相关的\u注册\u警报\u标签。然后在代码中,您可以使用不相关的\u SIGN\u UP\u ALERT\u标记,而不是3,这更容易理解,而不是通过代码猜测3的用途。当需要更改标记时,也不需要逐个更改3的引用 大括号是switch语句的好主意,例如,您可以使用大括号在switch语句中创建一个变量: