嘿那里Stack Overflow!如果您在没有它的情况下理解我的问题,请随意跳过代码;或多或少只是为那些偶然发现这个线程的学习者提供一些代码。
1)重复使用标签是否风格不佳?
2)对于switch语句,总是在每种情况下使用花括号是一种好习惯吗?我之所以这样做,是因为我很清楚旧的ARC更改导致“切换案例在受保护的范围内”错误,当您在案例块中分配变量时会发生这种错误。我问的问题与#1相同:我希望收紧我的代码而不会产生糟糕的风格习惯。
我只是掀起这个例子以涵盖两者,所以借口错别字等等:
Login.m
-(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两次并简化clickedButtonAtIndex方法吗?我是一名CS专业的学生,几个学期回来了,所以我不记得是否有任何澄清。我怀疑是否存在区分存在的技术原因,而且我都是关于简洁的代码,但我不想开始养成打破“这是经典方式”形式的习惯;特别是因为我对风格进行评分并与其他人合作进行大型项目。我知道这是一个小问题,但我发现自己想知道大多数人是如何做到的,并希望与你的专业知识进行对话。至于开关括号问题:我知道这可以被视为偏好(你们中的一些人编码为“尽可能简洁”,而其他人则编码为“尽可能一致”)......我只是好奇经验丰富的兽医认为什么应该是'现状'。
3)我知道这很差(编辑:可怕)礼仪,但我会喜欢至少1'投票'所以我有资格开始'投票',因为我每天无数次使用其他线程的知识,并且作为一个超过五年的潜伏者,我觉得是时候开始奖励那些有价值的互联网点了。感谢您的Stack Overflow时间。您真正是理解概念,发现解决方案和开发开发人员的最佳人选。
答案 0 :(得分:0)
如果您重复使用这些代码,我 认为您可以识别clickedButtonAtIndex委托方法中的哪个警报视图。
在包含具有相同标记的子视图的视图中使用viewWithTag函数时,也可能会出现问题。
对我而言,最好为标签定义一些const,以便您更容易查看代码,例如3设置为IRRELEVANT_SIGN_UP_ALERT_TAG。然后在您的代码中,您可以使用IRRELEVANT_SIGN_UP_ALERT_TAG而不是3,这更容易理解,而不是通过代码猜测什么是3。当需要更改标签时,您也不需要逐个更改3的出现次数。
大括号对于switch语句是一个好主意,例如你可以在switch语句中用它们创建一个变量:How do I create a variable inside a switch statement for a UITableView?