0

スタックオーバーフロー!コードなしで私の質問を理解している場合は、コードをスキップしてください。多かれ少なかれ、このスレッドに出くわした学習者にいくつかのコードを提供するだけです.

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つの「投票」が大好きなので、「投票」を開始する資格があります.半年以上の歴史を経て、非常に価値のあるインターネットポイントで役に立った人に報酬を与える時が来たと感じています.

お時間をいただきありがとうございますスタック オーバーフロー。概念を理解し、ソリューションを発見し、開発者を育成するのに最適です。

4

1 に答える 1

0

タグを再利用すると、clickedButtonAtIndex デリゲート メソッドでどのアラート ビューがどれであるかを識別できないと思います。

また、同じタグを持つサブビューを含むビューで viewWithTag 関数を使用すると、問題が発生する可能性があります。

そして、私にとっては、コードを簡単に確認できるように、タグにいくつかの const を定義することをお勧めします。たとえば、3 を IRRELEVANT_SIGN_UP_ALERT_TAG として設定します。次に、コードで 3 の代わりに IRRELEVANT_SIGN_UP_ALERT_TAG を使用できます。これは、3 が何であるかを推測してコードを調べるよりも理解しやすいです。タグを変更する必要がある場合、3 の出現箇所も 1 つずつ変更する必要はありません。

中かっこは、switch ステートメントに適しています。たとえば、中かっこを使用して switch ステートメント内に変数を作成できます。UITableView の switch ステートメント内に変数を作成するにはどうすればよいですか?

于 2013-05-28T13:47:24.403 に答える