2013-03-07 39 views
1

我想知道是否有達到以下要求的方式:Obj C - 有沒有辦法讓一個方法返回它被調用的方法?

首先,有一個methodA,這需要輸入objA,並檢查objA是否是有效的方法。如果它是有效的,那麼它返回一個對象objB。但是,如果objA無效,則它自己僅返回objA。請注意,即使objA有效,返回的objB仍可能與objB相同。

然後,有一個methodB和在method,methodA被調用。如果methodA的輸入有效,程序將繼續運行而不出錯。但是,如果methodA被稱爲無效輸入,則methodB應該終止(也就是返回一個指定錯誤的字符串)以防止未來崩潰。

,我能想到的,目前的解決方案是創建一個(BOOL)methodAInputIsValid:(obj)inputmethodB有:

if(methodAInputIsValid:input) { 
    obj objReturn = methodA:input; 
}else{ 
    //show error warning 
    return; 
} 
//continue doing something with objReturn and finally return some valid thing 

代碼的一個問題是,(BOOL)methodAInputIsValid:(obj)inputmethodA:(obj)input份額,在很多共同點的代碼,因爲有methodA的有效性測試。所以我想更有效地使用有效性測試,以便它可以用於methodB並刪除(BOOL)methodAInputIsValid

這裏是我能想到的一個可能的應用:

在程序中,用戶被要求輸入一個字符串,將引導程序的作用。但是,輸入字符串可能需要標準化,例如將所有字母轉換爲小寫字母,並將所有單引號轉換爲雙引號,並自動填寫缺失的右括號或引號。但是,如果用戶只是輸入無法標準化的廢話,那麼程序應該終止並警告用戶這個問題。這兩種方法是(BOOL)isStandardizeable:(NSString *)input(NSString *)standardize:(NSString *)input。因爲(NSString *)standardize已經返回NSString *,我不能讓它返回另一個BOOL,對吧?所以下面的代碼是不可能實現的:

if(standardize:input){ 
    NSString *result = standardize:input; 
} else { 
    NSLog(@"unrecognizable input!"); 
    return; 
} 
//continue... 

任何人都可以想辦法做到這一點?

回答

2

實際上,如果輸入無效,我只需要methodA返回nil。這是向調用者發送失敗信號的相當常見的方法。如果您真的需要方法的「身份」部分,只需要打電話者即可

id res = [... methodA:input]; 
if(res == nil) 
    res = input; 
相關問題