我想知道关于在我的开发过程中多次出现的情况的一般意见。 问题本身即将知道哪一个是最干净的代码。目标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