1

stringWithFormatこの方法は通常、次のように使用されることを知っています。

[NSString stringWithFormat: @"%@ %@", arg1, arg2];

私の質問は、このメソッドの最後の引数の型 (...仕様にあるもの) は正確には何ですか。

次のようなことができるようになりたいです。

NSArray *array = [NSArray arrayWithObjects: @"Hi", @"Bob"];
[NSString stringWithFormat: @"%@ %@", array]

ご覧のとおり、1 つのデータ構造arrayがすべての引数を保持しています。残念ながら、これは機能しません。メソッド内のすべての引数を明示的にリストする必要がないように、これを行うstringWithFormat方法はありますか?

4

3 に答える 3

5

引数にはどのような種類があります[NSString stringWithFormat]か?

フォーマット文字列を使用して、どのような型でもそうするように指示します。

私の質問は、このメソッドの最後の引数の型は正確には何ですか

それは最後の議論ではありません。これは、「変数関数」(この場合はメソッド) と呼ばれる概念です。は...、関数が任意の数の引数を取ることができることを示します。これは C の機能であり、C 標準ライブラリのヘッダーの型、マクロ、および関数を使用して使用できます<stdarg.h>。例: これは、指定されたオブジェクトで配列を作成します。

- (NSArray *)arrayWithCountAndObjects:(int)count, ...
{
    NSMutableArray *arr = [NSMutableArray array];

    va_list args;
    va_start(args, count);
    for (int i = 0; i < count; i++) {
        [arr addObject:va_arg(args, id)];
    }
    va_end(args);

    return arr;
}

ただし、ここで行うべきことは、可変引数でハッキングするのではなく、単に配列内の項目を結合することです。これは不要であるためです。

NSArray *arr = @[@"Hello", @" ", @"world!"];
NSString *s = [arr componentsJoinedByString:@""];
于 2013-03-28T19:54:47.657 に答える
0

配列が文字列を保持している場合は、文字列を format で使用したくない場合は、配列メソッド componentsJoinedByString: を使用します。文字列の間にスペースが必要な場合は、文字列として @" " を渡すだけです。

于 2013-03-28T19:54:15.170 に答える
0

可変引数を取ります。関数の型を調べたい場合は、「variadic」と呼ばれます。

この特定のケースでは、これらの引数は、指定したフォーマット文字列によって決定されます。%@は任意の cocoa オブジェクト ( から継承NSObject) を意味します。%sac 文字列 (ヌル終了文字配列) を意味します。%dは int を%f意味し、float または double などを意味します。それらはかなりたくさんあります ( C の関数%@から借用したものを除いてすべて)。詳細については、 httpprintf : //www.cplusplus.com/reference/cstdio/printf/とhttps://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/をご覧ください。 FormatStrings.html#//apple_ref/doc/uid/20000943

あなたの試みに関しては、それはそれがどのように機能するかではありません。さらに制御が必要な場合は、配列を個別のパラメーターに分割するか、 を使用するcomponentsJoinedByStringか、手動でループする必要があります。ただし、単一%@を使用して、配列を独自の形式で表示できます。おそらく[First Value; Second Value].

于 2013-03-28T20:04:15.617 に答える