Sam*_*ohn 43 cocoa objective-c swift
我正在将Swift集成到一个大型的现有Objective C项目中,并且遇到了我认为是循环引用的问题.
有问题的课程如下:
#import "Hopscotch-Swift.h"
@interface MyController : UIViewController<MyProtocol>
...
@end
Run Code Online (Sandbox Code Playgroud)
@objc protocol MyProtocol: NSObjectProtocol {
...
}
Run Code Online (Sandbox Code Playgroud)
#import "MyController.h"
Run Code Online (Sandbox Code Playgroud)
此代码无法编译,因为该Hopscotch-Swift.h文件不会生成.
我认为这是由于循环引用错误,因为我可以导入Hopscotch-Swift.h到未包含的目标c标头中,Hopscotch-Bridging-Header.h并且它可以正常工作.
是否有针对此问题的解决方法,还是应该向Apple提交雷达?
rud*_*udd 25
在您的情况下,前向声明应该有效.
在你的.h:
@protocol MyProtocol;
@interface MyController : UIViewController<MyProtocol>
@end
Run Code Online (Sandbox Code Playgroud)
在你的.m:
#import "HopScotch-Swift.h"
从如何添加-Swift.h头中使用的前向类引用?和Swift互操作性指南:
如果在Swift代码中使用自己的Objective-C类型,请确保在将Swift生成的头导入要从中访问Swift代码的Objective-C .m文件之前导入这些类型的Objective-C头.
Ech*_*lon 11
我试图在Objective-C协议中使用Swift类时遇到了这个问题,其中协议也是由另一个Swift类实现的.它充满了循环引用,我猜想尝试循环生成桥接头可能是一个问题,而不是"正常"循环包含问题.
对我来说,解决方案是在协议声明之前使用前向声明: -
// don't include the MyProject-Swift.h header
// forward declaration of Swift classes used
@class SwiftClass;
@protocol MyProtocol <NSObject>
- (SwiftClass *)swiftClass;
@end
Run Code Online (Sandbox Code Playgroud)
Joc*_*fer -1
您可以在您怀疑会触发循环引用的 .h 文件中执行以下操作:
#ifndef MY_HEADER_H
#define MY_HEADER_H
your header file
#endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5697 次 |
| 最近记录: |