我遇到了一个问题,我的Swift代码编译得很好但是生成的-Swift.h文件中有错误...
这是我正在做的一个例子:
class MyScene : CCLayer {
var ctrl : CCControlSlider?
}
Run Code Online (Sandbox Code Playgroud)
这在swift代码中编译得很好,我可以看到ctrl对象上的方法也很好.我的网桥标题中有以下内容:
#import "cocos2d.h"
#import "CCControlSlider.h"
Run Code Online (Sandbox Code Playgroud)
这在使用其他正常工作的库的其他类中完全正常.另请注意,我可以在Objective-c类中使用此CCControlSlider类,也没有任何问题.
以下是生成的-Swift.h文件中发生的情况:
SWIFT_CLASS("_TtC15MyProject10MyScene")
@interface MyScene : CCLayer
@property (nonatomic) CCControlSlider * ctrl;
@end
Run Code Online (Sandbox Code Playgroud)
该属性具有错误"未知类型名称"CCControlSlider",如果它在方法中使用,则它会给出错误"预期类型".
这可以很好地使用其他类,但由于某种原因,这一个类只在生成的头文件中提供此编译器错误,并且仅在从Swift使用时.
我想我想知道的是,我做错了什么或者这只是一个错误?
Col*_*ris 10
在将一组Objective C文件合并到我主要基于Swift的项目中时,我突然开始在它们上面收到很多这些错误.然后我意识到文件有:
#import <Foundation/Foundation.h>
Run Code Online (Sandbox Code Playgroud)
它没有:
#import <UIKit/UIKit.h>
Run Code Online (Sandbox Code Playgroud)
一旦我添加了该行,错误就开始解决了.之后的清洁总是有帮助的.祝好运
注意:使用较新版本的Swift导入更容易键入并完成如下操作:
import UIKit
Run Code Online (Sandbox Code Playgroud)
如果您不想担心导入ProjectName-Swift.h
文件的导入顺序,请尝试以下操作:
创建一个ProjectName-Swift-Fixed.h
使用以下内容命名的文件
// ProjectName-Swift-Fixed.h
@class CCControlSlider;
// (Add other imports or forward declarations here)
#import "ProjectName-Swift.h"
Run Code Online (Sandbox Code Playgroud)
其次,在代码库的其余部分中,替换#import "ProjectName-Swift.h"
为#import "ProjectName-Swift-Fixed.h"
这种方法比#import
在Objective-C代码中使用Swift类的每个地方上方复制和粘贴语句列表有两个好处:
ProjectName-Swift-Fixed.h
文件外,您不必担心导入的顺序#import
在使用Swift代码的每个Objective-C文件中添加新语句这里给出的答案是最简单的方法:https://stackoverflow.com/a/24216718/341994
基本上,在Objective-C代码中的某个位置,您将导入自动生成的-Swift.h
标头.在相同的代码中,在该#import
行之前插入#import "CCControlSlider.h"
.这两个#import
陈述的顺序至关重要!
这个Objective-C类可能不需要CCControlSlider的事实是无关紧要的(尽管如果确实如此,这是一个奖励).重要的是订单.我们希望在将名称空间暴露给自动生成的-Swift.h
标头之前将名称空间公开给CCControlSlider .
归档时间: |
|
查看次数: |
13328 次 |
最近记录: |