5

私はc++から来ており、テキストフィールドのユーザー入力用のバリデータークラスを作成しようとしています. 私の関数は と メッセージを返す必要がboolあります ( boolYES の場合、メッセージは ですNULL)。Objective-C には、C++ に似たものstd::pair(値のペアを含む) がありますか?

4

3 に答える 3

7

正確にはペアではありませんが、いくつかのオプションがあります。

1。配列または辞書 (「標準コレクション クラス」) を使用します。

NSArray *pair1 = @[@NO, @"Foo"];
NSArray *pair2 = @[@YES, [NSNull null]];

また

NSDictionary *pair = @{@"Flag" : @NO, @"Message" : @"Foo" };

だからあなたはアイデアを得る...

2: まだ存在しない場合は、独自の Pair クラスを作成してみませんか?

@interface MyPair: NSObject

@property (assign) BOOL flag;
@property (strong) NSString *message;

@end
于 2013-02-09T22:46:37.387 に答える
7

std::pairココアにはありません。自分で作成できます。ただし、問題に対するより慣用的なアプローチは、エラーを返す他のメソッドに似ています。つまり、エラーへのポインターへのポインターを渡し、次を返しBOOLます。

-(BOOL) validateInput:(id)input error:(NSError**)errPtr {
    // Validate the input
    // If the input is valid, do not assign `errPtr`, and return `YES`
    // Otherwise, create a `NSError` object, and assign to errPtr
}

このメソッドは次のように呼び出すことができます。

NSError *err;
if (![validator validateInput:@"some input" error:&err]) {
    // Show the error
}

このイディオムが Cocoa でどのように使用されるかの例については、クラスのregularExpressionWithPattern:options:error:メソッドを参照してください。NSRegularExpression

于 2013-02-09T22:47:11.087 に答える
5

Objective-C++ を使ってみませんか? ソースファイルに.mm拡張子を付けるだけで、c++ と object-c を混在させることができます。クラスを混在させることはできませんが、標準のテンプレートのものを使用できます。したがって、一部のオブジェクト Foo には、次のコードを含むメソッド doFoo があります。

std::pair<id, NSString*> foo;

foo.first = @"First";
foo.second = @"second";

NSLog(@"%@ %@", foo.first, foo.second);
于 2013-02-10T02:01:04.157 に答える