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