在调用块之前检查nil的安全且优雅的方法是什么?

时间:2015-07-27 03:40:29

标签: ios objective-c dry

我正在开发一个API,其中包含许多带有接口的块参数。我决定库应该接受nil的块参数。因此,在调用实现中的任何块之前,有必要检查nil

但是,如果有很多if,代码会变得非常难看。

if (completionHandler) {
    completionHandler(userInfo, success, error)
}

一行代码将成为3行。

我目前正在使用这样的宏定义来避免这种情况,

#define completionHandler(...) if (completionHandler) completionHandler(__VA_ARGS__)

效果很好。但是这种技术将我的回调名称限制为"completionHandler"。是否有更优雅,更安全的方式来支持任意回调名称?

是否有人对nil检查有任何建议?

1 个答案:

答案 0 :(得分:0)

在一行中完成并完全滥用运算符的一个选项是:

completionHandler && ( completionHandler(userInfo,success,error) , YES )

我建议不要使用宏来实现。通常,宏可以提高可读性,除了您将类似于原语的内容添加到应用程序的词汇表中并使事情混淆。

您也不必放{ }

if (completionHandler) completionHandler(userInfo,success,error) ;