我用Swift写了一个库,但我不能把它导入到我目前用Objective-C写的项目中。
有什么方法可以导入吗?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
我用Swift写了一个库,但我不能把它导入到我目前用Objective-C写的项目中。
有什么方法可以导入吗?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
当前回答
第一步:-
选择项目目标->构建设置->搜索(“定义”)->定义模块 将值从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"
其他回答
#import <TargetName-Swift.h>
当你从键盘输入#import <时,你会看到Xcode会自动提示你。
需要导入“ProductName-Swift.h”。注意,这是产品名称-其他答案犯了使用类名的错误。
这个文件是一个自动生成的头文件,它为项目中的所有Swift类定义了Objective-C接口,这些类要么带有@objc注释,要么继承自NSObject。
注意事项:
如果你的产品名称包含空格,用下划线替换它们(例如,My Project变成My_Project-Swift.h) 如果您的目标是一个框架,您需要导入<ProductName/ProductName- swift .h> 确保你的Swift文件是目标的成员
如果你在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生成的接口头名称”。该属性的值是您应该包含的名称。
如果你的“产品模块名”属性(上面的属性默认依赖的那个)根据你是否为测试/调试/发布/等进行编译而变化(就像我的情况一样),那么通过设置一个自定义名称使这个属性独立于那个变化。
只是一些关于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'"