2013-02-09 104 views
3

我来自c + +,我正尝试在文本字段中为用户输入创建验证器类。 我的功能需要返回一个bool和一条消息(如果bool是YES消息是NULL)。 Objective-C中是否存在类似于C++(其中包含一对值)的std::pair如何在Objective-C中返回类似于std :: pair的对象?

+0

只需创建您自己的类。 ObjC没有泛型设施,所以图书馆里的某种类不会太有用。 – millimoose 2013-02-09 22:44:51

+1

另外:为什么不使用'std :: pair'呢? – 2013-02-09 22:55:40

回答

6

Cocoa中没有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 
} 

对于这个成语是如何在可可使用的示例,请参见NSRegularExpression类的regularExpressionWithPattern:options:error:方法。

7

嗯,不完全是一对,但你有几种选择:

一。使用数组或字典( “标准集合类”):

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

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

所以你的想法...

二:为什么不写自己的Pair类如果它还不存在?

@interface MyPair: NSObject 

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

@end 
3

为什么不尝试使用Objective-C++?只需用.mm扩展名命名源文件,然后就可以将C++与objective-c混合使用。你不能混合类,但你可以使用标准模板的东西。因此,在某些对象Foo中,我有一个使用此代码的doFoo方法:

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

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

NSLog(@"%@ %@", foo.first, foo.second);