我用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语言版本->是
构建并运行。
其他回答
#import <TargetName-Swift.h>
当你从键盘输入#import <时,你会看到Xcode会自动提示你。
如果你在Swift 4中创建了一个项目,然后添加了Objective-C文件,这样做:
@objcMembers
public class MyModel: NSObject {
var someFlag = false
func doSomething() {
print("doing something")
}
}
参考:https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
下面是该怎么做:
在Objective-C中创建一个新项目 创建一个新的.swift文件 将会出现一个弹出窗口并询问“您是否想配置一个Objective-C桥接头”。 选择Yes。 点击Xcode项目文件 点击构建设置 找到搜索栏并搜索定义模块。 将“value”修改为“Yes”。 搜索“产品模块名称”。 将该值更改为项目的名称。 在App委托中,添加以下内容:
注意:无论何时你想使用你的Swift文件,你必须导入以下行:
#进口“YourProjectName-Swift.h”
只是一些关于Xcode的语法技巧
你不能导入“纯”函数,只能导入类,即使标记为“public”,所以: 公共函数f1(){ 打印(f1); }
将不会以任何方式调用。
如果你写类。,从NSObject中添加继承,其他将不可用。 如果它继承自NSObject,如下所示: 类Utils: NSObject{ static func aaa()->字符串{ 返回“AAA” } @objc static func bbb()->字符串{ 返回" BBB " } @objc private static func ccc()->字符串{ 返回“CCC” } }
在OBJC:
aaa()未调用:"没有已知的类方法的选择器'aaa'"
bbb() ok
ccc() NOT called: "没有已知的类方法的选择器'aaa'"
在你要构建的目标的构建设置(假设是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"。