我想知道關於在我的開發過程中多次出現的情況的一般意見。 問題本身即將知道哪一個是最乾淨的代碼。目標C:清潔代碼三元操作符創建NSDictionary
很多時候我不得不向服務器發送一個請求,我需要發送一個帶有不同鍵/值的NSDictionary。事情是,只要值存在發送參數,其他情況下不發送它。
因此,典型的解決方案可以使用if
聲明:
A)
NSMutableDictionary *parameters = [NSMutableDictionary alloc] init];
if (param1) {
parameters[key1] = param1;
}
if (param2) {
parameters[key2] = param2;
}
.....
或者替代
B)
NSMutableDictionary *parameters = [NSMutableDictionary alloc] init];
if (param1) parameters[key1] = param1;
if (param2) parameters[key2] = param2;
.....
但在另一方面,你可以使用一個三元操作?
(我喜歡這個解決方案),所以:
C)
NSMutableDictionary *parameters = [NSMutableDictionary alloc] init];
param1 ? parameters[key1] = param1 : nil;
param2 ? parameters[key2] = param2 : nil;
.....
而且還和替代
d)
NSMutableDictionary *parameters = [NSMutableDictionary alloc] init];
param1 ? parameters[key1] = param1 : ^{}();
param2 ? parameters[key2] = param2 : ^{}();
.....
你更喜歡哪一個?或者如果你有更好的主意,請讓我知道
謝謝!
UPDATE
,在我所顯示的示例中,條件相當simples,只是param1!=nil
但通常我有不同的條件。例如,如果參數是一個NSUInteger,並且我只是在它不同於NSNotFound
時發送它。 所以它可能是這樣的:
NSMutableDictionary *parameters = [NSMutableDictionary alloc] init];
param1!=NSNotFound ? parameters[key1] = @(param1) : nil;
param2!=NSNotFound ? parameters[key2] = @(param2) : nil;
對於這種情況,我更喜歡使用設置值:對於鍵:而不是三元。這是無安全和更清潔的恕我直言。 ref:https://developer.apple.com/reference/foundation/nsmutabledictionary/1416335-setvalue?language=objc –
那麼,在這個例子中可以適合。但總是沒用。如果實例的參數是一個'NSUInteger',並且我們只是發送參數,如果它不同於'NSNotFound'或'-1'或類似...,那麼選項'setValue:forKey'因爲一個@( -1)'是一個對象,'@(NSNotFound)'也是。 您的建議將需要以前的轉換才能在具體情況下反對。 – fjtrujy
最後,使用'setValue:forKey',你不能有一個複雜的條件,如果你的條件是'object!= nil',你就可以使用它。 – fjtrujy