我用Swift写了一个库,但我不能把它导入到我目前用Objective-C写的项目中。
有什么方法可以导入吗?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
我用Swift写了一个库,但我不能把它导入到我目前用Objective-C写的项目中。
有什么方法可以导入吗?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
当前回答
如果你想使用Swift文件到Objective-C类,那么从Xcode 8开始,你可以按照以下步骤:
如果您已经在Objective-C中创建了项目:
创建新的Swift文件 Xcode会自动提示输入桥头文件 产生它 在Objective-C控制器中导入"Project_Name-Swift.h"(在实现中导入,而不是在接口中导入)(如果你的项目名称之间有空格,那么使用下划线"Project_Name-Swift.h") 你将能够在Swift中访问你的Objective-C类。
编译它,如果它会产生链接器错误,如:用较新的Swift语言版本(3.0)编译,而不是以前的文件(2.0),用于架构x86_64或armv 7
在您的
Xcode ->项目->目标->构建设置->使用传统Swift语言版本->是
构建并运行。
其他回答
在Objective-c中导入Swift文件会导致这个错误,如果导入不正确的话。
注意:你不需要从外部导入Swift文件,你只需要导入一个文件来照顾Swift文件。
当你在Objective-C项目中创建/复制Swift文件时。它会自动创建一个桥接头。
检查Objective-C生成的接口头名称在目标->构建设置。
基于以上,我将按原样导入KJExpandable-Swift.h。
你的将是TargetName- swift .h,其中TargetName根据你的项目名称或你可能添加并在其上运行的另一个目标而不同。
因为下面我的目标是KJExpandable,所以它是KJExpandable- swift .h
第一步:-
选择项目目标->构建设置->搜索(“定义”)->定义模块 将值从No更新为Yes
“定义模块”:YES。
“总是嵌入Swift标准库”:是的。
“安装Objective-C兼容头”:YES。
第二步:-
在Objective C“.h”文件中添加Swift文件类,如下所示
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
在Objective C中导入“ProjectName(你的项目名)-Swift.h”。m”文件
//TestViewController.m
#import "TestViewController.h"
/*import ProjectName-Swift.h file to access Swift file here*/
#import "ProjectName-Swift.h"
如果你正在使用Cocoapods,并试图在ObjC项目中使用Swift pod,你可以简单地执行以下操作:
@import < FrameworkName >;
在你要构建的目标的构建设置(假设是MyApp-Swift.h)中搜索“Objective-C生成的接口头名称”,并在你要访问Swift api的源文件中导入这个设置的值(#import“MyApp-Swift.h”)。
该字段的默认值是$(SWIFT_MODULE_NAME)-Swift.h。如果双击“Objective-C Generated Interface Header Name”设置的值字段,就可以看到它。
同样,如果在模块名中有破折号(假设是My-App),那么在$(SWIFT_MODULE_NAME)中所有的破折号都将被下划线替换。然后你需要添加#import "My_App-Swift.h"。
苹果官网说明:
将Swift代码从相同的框架导入Objective-C 在构建设置下,在打包中,确保定义模块 该框架目标的设置被设置为Yes。导入Swift代码 从框架目标到其中的任何Objective-C .m文件 框架目标使用此语法并适当替换 的名字: #进口“ProductName-Swift.h”
修订:
只能导入。m格式的“ProductName-Swift.h”。
目标中的Swift文件将在Objective-C .m文件中可见 包含此导入语句。 为了避免循环引用,不要将Swift导入Objective-C 头文件。相反,你可以向前声明一个Swift类来使用它 在Objective-C头文件中。注意你不能子类化一个Swift类 在objective - c中。