“工程名-Swift.h”这个文件是将Swift代码转为OC的文件,打开这个文件查看,可以看到全部是OC代码。例如,我在OC项目中,创建一个Swift文件,继承自UIView,命名为SwiftView。
自动生成的代码:
import UIKit
class SwiftView: UIView {
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
}
build一下,查看“项目名-Swift.h”文件(在OC文件里,#import "工程名-Swift.h"
,然后跳到头文件查看,直接在工程导航栏里是找不到的),会在文件的底部看到:
@interface SwiftView : UIView
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
这个说明,系统会把Swift文件转换为OC文件,放到“工程名-Swift.h”文件中,以供OC调用。
这里有一点要注意,“工程名-Swift.h”文件里的工程名到底是什么?实际并不是我们真正的工程名:
而是:
target->build setting->packaging->product module name
将product module name换成“product module name-Swift.h”。如果你的product module name有问题,例如是中文,特殊字符,你需要改为合法字符。改过之后,需要删除DerivedData文件夹,重新编译。
/Users/用户名/Library/Developer/Xcode/DerivedData