我用Swift写了一个库,但我不能把它导入到我目前用Objective-C写的项目中。

有什么方法可以导入吗?

#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found

当前回答

下面是该怎么做:

在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'"

如果你在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/

在项目中找到. 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

如果你想使用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