如何将Swift代码导入Objective-C?

 小鬼shenzhen 发布于 2023-01-11 10:13

我在Swift中编写了一个库,但我无法将其导入到用Objective-C编写的当前项目中.

有没有办法导入它?

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

Bill.. 399

你需要导入TargetName-Swift.h.请注意,它是目标名称 - 其他答案错误地使用了类名.

这个单独的文件是一个自动生成的头文件,它为项目中所有带有注释@objc或继承的Swift类定义了Objective-C接口NSObject.

注意事项:

如果您的目标名称包含空格,请将其替换为下划线(例如,My Project变为My_Project-Swift.h)

如果您的目标是框架,则需要导入

确保您的Swift文件是目标的成员

为什么这么难以记录? (70认同)

编辑:**注意:**为此工作,必须定义项目模块名称.请参阅:http://stackoverflow.com/a/24064015/2085743 (7认同)

我只想添加一个注释,如果您的项目名称有任何空格或特殊字符,则必须用下划线替换它们,例如"My App"将是"My_App-Swift.h" (7认同)

请注意,如果您尝试在导入中使用Swift文件名,则会收到错误"Expected';' 在顶级声明者之后".在"导入基础"之后的Swift文件中. (5认同)

@lelelo不,那个文件与这个文件相反.桥接头由开发人员编写,允许您将Objective-C和C符号引入Swift代码.Target-Swift.h文件是自动生成的,让您的Objective-C/C代码访问Swift符号. (3认同)

我找到了一种找到正确的生成头文件名的新方法:***转到目标->构建设置->搜索关键字`Objective-C生成的接口头名`***,宾果! (2认同)


Andrei Papan.. 145

Apple网站上的说明:

从同一框架将Swift代码导入Objective-C

生成设置,在包装,确保定义模块 设置在该框架的目标被设定为.使用此语法将该框架目标中的Swift代码导入该框架目标中的任何Objective-C .m文件并替换相应的名称:

#import"ProductName-Swift.h"

修订:

您只能在.m文件中导入"ProductName-Swift.h".

目标中的Swift文件将在包含此import语句的Objective-C .m文件中可见.

要避免循环引用,请不要将Swift导入Objective-C头文件.相反,您可以转发声明Swift类以在Objective-C头中使用它.请注意,您不能在Objective-C中子类化Swift类.

在此输入图像描述

9 个回答
  • 你需要导入TargetName-Swift.h.请注意,它是目标名称 - 其他答案错误地使用了类名.

    这个单独的文件是一个自动生成的头文件,它为项目中所有带有注释@objc或继承的Swift类定义了Objective-C接口NSObject.

    注意事项:

    如果您的目标名称包含空格,请将其替换为下划线(例如,My Project变为My_Project-Swift.h)

    如果您的目标是框架,则需要导入 <TargetName/TargetName-Swift.h>

    确保您的Swift文件是目标的成员

    2023-01-11 10:14 回答
  • 这是做什么的:

      在Objective-C中创建一个新项目

      创建一个新.swift文件  

      将出现一个弹出窗口,询问"您是否要配置Objective-C桥接标头".

      选择.

      单击您的Xcode项目文件

      单击Build Settings

      找到搜索栏并搜索" 定义模块".

      将值更改为.

      搜索产品模块名称.

      将值更改为项目名称.

      在App委托中,添加以下内容: #import "YourProjectName-Swift.h"


    注意: 每当您想要使用Swift文件时,必须按照以下行导入:

    #import "YourProjectName-Swift.h"

    2023-01-11 10:14 回答
  • Apple网站上的说明:

    从同一框架将Swift代码导入Objective-C

    生成设置,在包装,确保定义模块 设置在该框架的目标被设定为.使用此语法将该框架目标中的Swift代码导入该框架目标中的任何Objective-C .m文件并替换相应的名称:

    #import"ProductName-Swift.h"

    修订:

    您只能在.m文件中导入"ProductName-Swift.h".

    目标中的Swift文件将在包含此import语句的Objective-C .m文件中可见.

    要避免循环引用,请不要将Swift导入Objective-C头文件.相反,您可以转发声明Swift类以在Objective-C头中使用它.请注意,您不能在Objective-C中子类化Swift类.

    在此输入图像描述

    2023-01-11 10:14 回答
  • 如果你正在使用Cocoapods并试图在ObjC项目中使用Swift pod,你可以简单地执行以下操作:

    @import <FrameworkName>;

    在此输入图像描述

    2023-01-11 10:14 回答
  • 转到项目文件中的构建设置并搜索"Objective-C生成的接口标题名称.该属性的值是您应该包含的名称.

    如果您的"产品模块名称"属性(默认情况下上述属性所依赖的属性)取决于您是否编译test/debug/release/etc(就像我的情况一样),那么使此属性独立于此通过设置自定义名称进行更改.

    2023-01-11 10:14 回答
  • 第一步:-

    选择项目目标 - >构建设置 - >搜索('定义') - > 定义模块 更新值

    "定义模块":是的.

    "始终嵌入Swift标准库":是的.

    "安装Objective-C兼容性标题":.

    在此输入图像描述

    第二步:-

    在Objective C".h"文件中添加Swift文件类,如下所示

    #import <UIKit/UIKit.h>
    
    @class TestViewController(Swift File);
    
    @interface TestViewController(Objective C File) : UIViewController
    
    @end
    

    在Objective C".m"文件中导入'ProjectName(您的项目名称)-Swift.h'

    //TestViewController.m 
    #import "TestViewController.h"
    
    /*import ProjectName-Swift.h file to access Swift file here*/
    
    #import "ProjectName-Swift.h"
    

    2023-01-11 10:14 回答
  • 如果Swift内部导入文件Objective-cimport正确,则会导致此错误.

    注意:您不必在外部导入Swift文件,只需导入一个文件来处理swift文件.

    当你创建/复制斯威夫特文件的Objective-C项目.它会自动创建一个桥接头.

    检查Objective-C Generated Interface Header NameTargets -> Build Settings.

    在此输入图像描述

    基于上面,我将按KJExpandable-Swift.h原样导入.

    你的将是TargetName-Swift.h,如果TargetName根据你的项目名称不同或其他目标您可能已经加入和在其上运行.

    如下所示我的目标是KJExpandable,所以它是KJExpandable-Swift.h
    在此输入图像描述

    2023-01-11 10:14 回答
  • 如果您将Swift代码导入到同一框架内的 Objective-C文件中,则需要注意一点.您必须通过指定框架名称和尖括号来执行此操作:

    #import <MyFramework/MyFramework-Swift.h>

    MyFramework这是"产品模块名称"构建设置(PRODUCT_NAME = MyFramework).

    简单地添加#import "MyFramework-Swift.h"将无效.如果你检查构建的产品目录(在#import添加这样的目录之前,所以你至少有一个成功的构建在目标中有一些Swift代码),那么你仍然应该MyFramework-Swift.hHeaders目录中看到该文件.

    2023-01-11 10:14 回答
  • 如果您有一个在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/

    2023-01-11 10:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有