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