OC和Swift混编,“项目名-Swift.h”文件找不到

“工程名-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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容