【问题标题】:Objective-C lightweight generics won't compileObjective-C 轻量级泛型不会编译
【发布时间】:2020-07-01 16:23:25
【问题描述】:

刚刚升级到 Xcode 12/iOS 14,Intents 框架正在尝试在各种头文件中编译这样的代码:

@interface INObjectSection<ObjectType> : NSObject <NSCopying, NSSecureCoding>

但编译器似乎不知道ObjectType 是通用占位符:

没有名为“ObjectType”的类型或协议

没有人抱怨这个,所以我猜我在这个非常古老的项目中有一些设置阻止了 Objective-C 泛型的编译,但我找不到任何东西。

【问题讨论】:

  • 不知道也没有使用 12,但是尝试在接口之前插入 @class ObjectType; 看看会发生什么。
  • FWIW 无法在 11.5 上生成这个,即使在玩弄少数可用的泛型设置时也是如此。在 11.5 上它可以正常工作。

标签: ios objective-c ios14


【解决方案1】:

由于某种原因,#import 语法不再有效。我换了

#import <Intents/Intents.h>

@import Intents;

现在它可以编译了。

【讨论】:

  • 这与问题有什么关系?
  • 无法编译的代码是从 Intents 框架中导入的(在我认为的问题中确实说过)。
  • 但是为什么使用不同的导入语法会改变编译器对导入头代码含义的理解呢?我的意思是,这很有趣,但到目前为止,它只是用另一个谜团代替了一个谜团。
  • 哈,这取决于你是否只是想在截止日期前编译一些东西 :) 也许@import 语法正在访问 Intents 框架的编译(由 Swift?)版本,并且因此,Obj C 轻量级泛型的粘贴膏不会遇到任何问题。但还没仔细研究。
  • 啊,好吧 - 所以可能是 -fmodules 或相关人员造成了麻烦,呃,不编译的麻烦(而且泛型本身不是麻烦......我认为)