スタックオーバーフロー!コードなしで私の質問を理解している場合は、コードをスキップしてください。多かれ少なかれ、このスレッドに出くわした学習者にいくつかのコードを提供するだけです.
1)タグを再利用するのはスタイルが悪いですか?
2) switch ステートメントの場合、ケースごとに常に中かっこを使用することをお勧めしますか? ケースのブロック内で変数を割り当てるときに発生する「スイッチケースは保護されたスコープ内にあります」というエラーにつながる古いARCの変更をよく知っているので、そうします。#1 と同じ理由で質問します。悪いスタイルの習慣を身につけずに、コードを引き締めたいと考えています。
両方をカバーするためにこの例を作成しているだけなので、タイプミスなどを許してください。
ログイン.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 を 2 回割り当てて、clickedButtonAtIndex メソッドを単純化できますか? 私は CS 専攻で、これを数学期前に取り上げたので、説明があったかどうかは覚えていません。区別する技術的な理由が存在するとは思えませんし、簡潔なコードがすべてですが、「これが古典的な方法です」という形式を今後破る習慣を身に付けたくありません。特に私はスタイルで評価され、より大きなプロジェクトで他の人と協力しています。些細な質問であることは承知していますが、ほとんどの人がこれについてどのように考えているのか疑問に思っており、あなたの専門家との対話を楽しみにしています.
3)これが悪い(編集:ひどい)エチケットであることは知っていますが、少なくとも1つの「投票」が大好きなので、「投票」を開始する資格があります.半年以上の歴史を経て、非常に価値のあるインターネットポイントで役に立った人に報酬を与える時が来たと感じています.
お時間をいただきありがとうございますスタック オーバーフロー。概念を理解し、ソリューションを発見し、開発者を育成するのに最適です。