我用Swift写了一个库,但我不能把它导入到我目前用Objective-C写的项目中。
有什么方法可以导入吗?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
我用Swift写了一个库,但我不能把它导入到我目前用Objective-C写的项目中。
有什么方法可以导入吗?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
当前回答
在Objective-c中导入Swift文件会导致这个错误,如果导入不正确的话。
注意:你不需要从外部导入Swift文件,你只需要导入一个文件来照顾Swift文件。
当你在Objective-C项目中创建/复制Swift文件时。它会自动创建一个桥接头。
检查Objective-C生成的接口头名称在目标->构建设置。
基于以上,我将按原样导入KJExpandable-Swift.h。
你的将是TargetName- swift .h,其中TargetName根据你的项目名称或你可能添加并在其上运行的另一个目标而不同。
因为下面我的目标是KJExpandable,所以它是KJExpandable- 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中。
只是一些关于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'"
下面是该怎么做:
在Objective-C中创建一个新项目 创建一个新的.swift文件 将会出现一个弹出窗口并询问“您是否想配置一个Objective-C桥接头”。 选择Yes。 点击Xcode项目文件 点击构建设置 找到搜索栏并搜索定义模块。 将“value”修改为“Yes”。 搜索“产品模块名称”。 将该值更改为项目的名称。 在App委托中,添加以下内容:
注意:无论何时你想使用你的Swift文件,你必须导入以下行:
#进口“YourProjectName-Swift.h”
在项目中找到. pch文件。然后添加#import "YourProjectName-Swift.h"这将导入类头文件。这样你就不需要导入到特定的文件中。
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "YourProjectName-Swift.h"
#endif
转到项目文件中的构建设置,搜索“Objective-C生成的接口头名称”。该属性的值是您应该包含的名称。
如果你的“产品模块名”属性(上面的属性默认依赖的那个)根据你是否为测试/调试/发布/等进行编译而变化(就像我的情况一样),那么通过设置一个自定义名称使这个属性独立于那个变化。