2

私はiOSとObjective-Cの世界に非常に慣れていないので、ご容赦ください。Apple の Obj-C 入門書と、Web で提供されているいくつかの無料の入門書を読みました。

ボタンを押すと、単純にラベルのテキストを取得して文字列と連結しようとしています。私の考え方はまだ Android/Java であり、それがいかに単純であるかということですが、ここで問題が発生しています。それにもかかわらず、ここに私のコードがあります:

- (IBAction)myButton:(UIButton *)sender {
    self.myLabel.text = [self.myLabel.text stringByAppendingString:@"obj-c is hard =/"];

}

それはかなり標準的なようですが、自分がこれを頻繁に行うことを想像できるので、これが正しいことを確認したいのですが、これを行うには他にどのような方法がありますか?

4

4 に答える 4

2

はい、これは正しい方法です。別の方法を使用する場合は、この方法を使用してください

self.myLabel.text = [NSString stringWithFormat:@"%@ obj-c is hard =/",self.myLabel.text];
于 2013-06-06T05:08:18.660 に答える
0

これは文字列を結合する標準的な方法です。ios は NSArray や NSDictiornary delaration のように簡単にするために構文を更新しましたが、連結についてはショートカット方法を宣言していません。

これを見てください

また

文字列の連結を単純化するトリックを使用できます。パラメーターをマクロに渡し、次の結合リテラル構文を使用します。

#define STRING(text) @""text""

@implementation SPTViewController

- (void)viewDidLoad
{
    NSString *joinedFromLiterals =STRING(@"Congratulations!, ") @"I " @"really " @"enjoy " @"carpenting!";
    NSLog(@"joined string %@",joinedFromLiterals);

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

出力は ----------

結合された文字列 おめでとう!, 私は大工を本当に楽しんでいます!

于 2013-06-06T05:09:23.803 に答える
0

はい、これは正しいですが、落とし穴があります。以前に self.myLabel.text の値を設定していない場合はnil、デフォルトで設定されます。次に、任意のメソッド ( など) を呼び出した結果[self.myLabel.text stringByAppendingString:@"obj-c is hard =/"]も nil になるため、myLabel空のテキストが残ります。Objective-C が値を処理する方法は、Javanilでの処理とは異なります。 安全のために、最初にラベルのテキストを初期化します。null

self.myLabel.text = @"";
于 2013-06-06T09:26:29.213 に答える
0

あなたはそれを正しくやっています。確かに、Objective-C は C# や Java、さらには Visual Basic .net よりも少し冗長ですが (以前はこれらすべての言語で作業していたため)、長いメソッド名に悩まされることはありません。一部#defineの s は次のように非常に役立ちますが (C インライン関数として書き直されます):

static inline __attribute__((always_inline))
__attribute__((format(NSStirng, 1, 2)) NSString *SKSTR(NSString *fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    NSString *string = [[NSString alloc] initWithFormat:fmt arguments:args];
    va_end(args);
#if !__has_feature(objc_arc)
    [string autorelease];
#endif
    return string;
}

__attribute__s とs が混乱しないことを願って#ifいます。無視しても問題ありません。

使用するには:

self.label.text = SKSTR(@"%@, ugh!", self.label.text); // just like NSLog or snprintf :)
于 2013-06-06T09:35:14.580 に答える