【发布时间】:2014-01-08 13:31:56
【问题描述】:
我在一个项目中拥有这个漂亮且方便的辅助内联函数(最初源于 here 和 here):
static inline BOOL isEmpty(id thing) {
return !thing
|| [thing isKindOfClass:[NSNull class]]
|| ([thing respondsToSelector:@selector(length)] && [((id)thing) length] == 0)
|| ([thing respondsToSelector:@selector(count)] && [((id)thing) count] == 0);
}
static inline BOOL isNotEmpty(id thing) {
return !isEmpty(thing);
}
一切正常。
它对于检查 NSString、NSData、NSArray、NSDictionary、NSSet 等很有用...我现在的问题是我将它带入另一个项目(我将使用的静态框架/库)并拥有以下问题阻止了我的项目构建:
我使用的是相同(最新)版本的 xCode,所以不确定有什么区别会在一侧而不是另一侧阻止这种情况......两个项目中的项目设置显然不同(如提到了,一个是框架,一个是常规项目)但是那样做吗?
提前致谢!
后解决方案编辑以供将来访问:
按住命令并单击方法或属性以获取编译器看到的所有实例的下拉列表...您可能有冲突的返回类型。
【问题讨论】:
-
为什么叫它宏?它是一个内联函数?
-
为了正确而改了。我意识到,但在精神上我或多或少将两者等同起来...... :-)
-
宏可能有很多奇怪的副作用,如果不放在一个假循环中来确定它们的范围等,就会中断
-
好奇你为什么要使用
isEmpty?似乎nil可以是您的空值。您不知道对象的预期类型吗?否则,如果您想检查一个数组(例如)是nil还是一个空数组,只需使用array.count == 0。这将处理一个nil数组和一个空数组,等等。 -
持续检查 NSNull 对我来说也是一个问题。我做了很多 JSON 解析以及与服务器端点的大量通信......在从 json 中提取之后以及在使用它们之前检查字段或检查变量时,这个函数会发挥很大作用。就个人而言,拥有这样的东西是一个很好的抽象层次。
标签: ios objective-c xcode