2012-02-13 93 views
0

右键可以说我有一个方法是这样的:限制什么是传递给方法

- (void)doStuff:(NSString *)doStuffWith; 

我可以让这个doStuffWith只接受某些词喜欢让说,“DoSomething1”和“了doSomething2”所以,当我把它想:

[self doStuff:@"DoSomething1"]; 

它将运行,但如果我把它想:

[self doStuff:@"HelloWorld"]; 

它会发出警告或什么?

回答

2

你应该用枚举,如:

typedef enum { 
    MyStuffOne, 
    MyStuffTwo, 
    MyStuffThree 
} MyStuff; 


- (void)doStuff:(MyStuff)stuff; 

这样你就可以通过只 “的MyStuff”(MyStuffOne,MyStuffTwo,MyStuffThree)...这些都是整数,如果你想玩弦,在你的方法你必须做的事情如:

NSString *string; 

    switch (stuff) 
    { 
     case MyStuffOne: 
     string = @"StuffOneString"; 
     break; 

    default: 
    ... 
    } 
+0

感谢typedef枚举限制了可以放入它的值。这真的有帮助。 – Popeye 2012-02-13 15:16:06

1

为什么不if语句添加到方法这样

- (void)doStuff:(NSString *)doStuffWith{ 

    if([doStuffWith isEqualToString:@"DoSomething1"]){ 

//do whatever you want here 

}else{ 

//add your warning here 

} 

} 

这应该做工精细

2

如果您需要限制可能值的金额,你应该使用枚举数据类型,而不是NSString的

1

您可以创建一个方法来检查单词是否有效,然后断言该方法返回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... 
} 
+0

这很好,但我希望它当我实际编码时就像使用[myModalViewController setModalTransitionStyle:UIModalPresentationFullScreen];它给出了一个警告,说你的某些事情不能将UIModalPresentationStyle传递给UIModalTransitionStyle。我相信这与枚举有关,但我不确定。 – Popeye 2012-02-13 15:07:35

相关问题