【发布时间】:2016-08-02 11:34:42
【问题描述】:
我需要使用 Objective-C 类别来扩展 Swift 类。我做了如下的事情:
在“SomeClass.swift”中:
class SomeClass: NSObject {
}
在“SomeClass+Extension.h”中:
#import "Project-Swift.h"
@interface SomeClass (Extension)
-(void)someMethod();
@end
这运作良好。如果我尝试在我的 Objective C 代码中使用 SomeClass 扩展,那很好。
问题是,如果我想在另一个 Swift 类中使用someMethod(),我需要将SomeClass+Extension.h 文件放入我的ObjC-BridgingHeader.h 文件中。
但是这样做会导致循环依赖,因为SomeClass+Extension.h 也会导入Project-Swift.h。
有人有解决这个问题的好方法吗?
请注意,简单地在类别标题中前向声明类是行不通的,因为类别不能将前向声明用于它自己的实现:
@class SomeClass 不导入Project-Swift.h 会产生编译错误。
【问题讨论】:
-
@TroyT 您发布的解决方案将不起作用,因为这是一个objective-C类别,在一个类别中您不能简单地转发声明一个类,您必须导入您扩展的类的头文件。
-
首先尝试了解@class 和#import 之间的区别,您可以在这里找到一个很好的答案stackoverflow.com/questions/322597/class-vs-import
-
@Johnykutty 我知道@class 和#import 之间的区别。但在这种情况下,@class 将不起作用,因为它是一个类别。在一个类别中,您必须显式导入您扩展的类的头文件,如果您尝试进行前向声明,您将获得
class undefined error。所以很遗憾你的解决方案行不通。 -
即使它是一个类@class 也不起作用,因为@class 指令只告诉编译器它是一个类,没有其他信息,如它的属性、方法、超类等。如果你想使用他们你应该导入相应的头文件
标签: objective-c swift interpolation