我来自 c++,我正在尝试为文本字段中的用户输入创建验证器类。我的函数需要返回一个bool
和一个消息(如果bool
是 YES 消息是NULL
)。Objective-C 中是否有类似于std::pair
C++ 的内容(包含一对值)?
问问题
7941 次
3 回答
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
于 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++ 与 Objective-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 回答