右键可以说我有一个方法是这样的:限制什么是传递给方法
- (void)doStuff:(NSString *)doStuffWith;
我可以让这个doStuffWith只接受某些词喜欢让说,“DoSomething1”和“了doSomething2”所以,当我把它想:
[self doStuff:@"DoSomething1"];
它将运行,但如果我把它想:
[self doStuff:@"HelloWorld"];
它会发出警告或什么?
右键可以说我有一个方法是这样的:限制什么是传递给方法
- (void)doStuff:(NSString *)doStuffWith;
我可以让这个doStuffWith只接受某些词喜欢让说,“DoSomething1”和“了doSomething2”所以,当我把它想:
[self doStuff:@"DoSomething1"];
它将运行,但如果我把它想:
[self doStuff:@"HelloWorld"];
它会发出警告或什么?
你应该用枚举,如:
typedef enum {
MyStuffOne,
MyStuffTwo,
MyStuffThree
} MyStuff;
- (void)doStuff:(MyStuff)stuff;
这样你就可以通过只 “的MyStuff”(MyStuffOne,MyStuffTwo,MyStuffThree)...这些都是整数,如果你想玩弦,在你的方法你必须做的事情如:
NSString *string;
switch (stuff)
{
case MyStuffOne:
string = @"StuffOneString";
break;
default:
...
}
为什么不if语句添加到方法这样
- (void)doStuff:(NSString *)doStuffWith{
if([doStuffWith isEqualToString:@"DoSomething1"]){
//do whatever you want here
}else{
//add your warning here
}
}
这应该做工精细
如果您需要限制可能值的金额,你应该使用枚举数据类型,而不是NSString的
您可以创建一个方法来检查单词是否有效,然后断言该方法返回true。如果程序员曾经使用错误的字符串调用该方法,那么会导致应用程序崩溃,但如果用户能够自己输入字符串,则无法真正提供帮助。另外,如果您使用默认项目设置,则断言仅在使用Debug
配置进行构建时才会发生。
例如:
static NSSet* __validStrings = nil;
- (BOOL)checkString:(NSString*)string
{
if([string length] == 0) return NO;
static dispatch_once_t token;
dispatch_once(&token, ^{
// build the list of valid words once, or load from a plist or something
// if they are very large or change often
NSArray* validWords = [NSArray arrayWithObjects:@"valid", @"doSomething", @"etc.", nil];
__validStrings = [[NSSet alloc] initWithArray:validWords];
});
return [__validStrings containsObject:string];
}
// your doStuff implementation
- (void)doStuff:(NSString*)doStuffWith
{
// This will crash the program and give you debugging information if doStuffWith
// is not in your string list
NSAssert1([self checkString:doStuffWith], @"invalid string: %@", doStuffWith);
// continue on with your method implementation...
}
这很好,但我希望它当我实际编码时就像使用[myModalViewController setModalTransitionStyle:UIModalPresentationFullScreen];它给出了一个警告,说你的某些事情不能将UIModalPresentationStyle传递给UIModalTransitionStyle。我相信这与枚举有关,但我不确定。 – Popeye 2012-02-13 15:07:35
感谢typedef枚举限制了可以放入它的值。这真的有帮助。 – Popeye 2012-02-13 15:16:06