加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – Objective-C isEmpty helper突然停止构建

发布时间:2020-12-14 19:23:29 所属栏目:百科 来源:网络整理
导读:我有这个美丽的我在一个项目中有一个方便的帮助内联函数(原来它的根源是 here和 here): static inline BOOL isEmpty(id thing) { return !thing || [thing isKindOfClass:[NSNull class]] || ([thing respondsToSelector:@selector(length)] [((id)thing) l
我有这个美丽的&我在一个项目中有一个方便的帮助内联函数(原来它的根源是 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,因此不确定可能会阻止这一方面而不是另一方面的差异……项目设置在两个项目中明显不同(如上所述,是一个框架,一个是常规项目)但是会这样做吗?

提前致谢!

POST-SOLUTION-EDIT用于未来访问:

按住命令并单击方法或属性以获取编译器正在看到的所有实例的下拉…您可能具有冲突的返回类型.

解决方法

听起来问题是框架/库中的某些类声明了一个返回不同于 – [NSArray count](等)的东西的-count方法.

即使您向未知(id)类型的对象发送消息,编译器也需要知道有关将要调用的方法的一些信息,包括返回类型.简而言之,这是因为消息发送路径根据将被调用的方法的返回类型而不同.在类似代码的情况下,编译器将查找项目中声明的任何方法,其名称与您发送的消息相匹配,并假设为了计算返回类型等而调用的方法.例如,它发现了两个具有相同名称的不同方法,但它们具有不同的返回类型,因此不知道发送计数消息所需的确切语义.

快速而肮脏的解决方案是将isEmpty()函数中的强制转换更改为[(NSArray *)事物计数].只要您从不使用具有不同-count方法的任何类的实例调用isEmpty(),这应该可以正常工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读