【问题标题】:Calling swift from obj c从 obj c 调用 swift
【发布时间】:2016-04-11 00:40:50
【问题描述】:

我正在尝试从 objC 调用 swift 文件中的函数。我曾尝试“#import project_name-Swift.h”,但出现错误 -> “找不到 project_name.h 文件”

objC 文件是 pod 的一部分。我不知道这是否与问题有关。

感谢您的帮助! :)

【问题讨论】:

  • 请说明您的项目是如何设置的。 Swift 文件在哪个模块/目标中? pod 与项目的其余部分有什么关系?
  • 你能分享更多代码吗?请

标签: ios swift


【解决方案1】:

您需要按照以下简单的步骤来解决您的问题:

1.) 首先从项目中删除现有的桥接头文件(选择文件 -> 右键单击​​ -> 在查找器中显示)。

2.) 删除后,还要检查它是否存在于项目中。如果不存在,然后在项目的根目录下准备新的头文件。

3.) 现在选择您的项目并进入构建设置。 finf swift 编译器 - 代码生成部分。

4.) 将 安装 Objective-C 兼容性标头 设置为 YES

5.) 在 objective-c 桥接标头 中设置路径,例如:projectname/bridging-header-filename.h

6.) 现在按 alt 键选择产品菜单并选择 clean build folder。运行您的项目,现在它运行良好..!

【讨论】:

    【解决方案2】:

    您需要添加一个桥头文件 (PROJECT_NAME-Bridging-Header.h) 并添加 XCode 在其中找不到的所需头文件。您可以在项目的Build Settings 下的Objective-C Bridging Header 下找到该文件的名称。

    这个文件是在你添加一个 objc 文件到你的 Swift 项目时自动创建的,它用于从 Swift 调用到 Objective-C,但显然,相反的方向也需要它。

    您需要做的其他事情是将#import "PROJECT_NAME-Swift.h"添加到您的objective-c 文件中。该文件在 DerivedData 项目的 Build 目录深处创建,其命名约定是预定义的。

    此外,您需要使用 : NSObject 扩展 Swift 类,并在声明的开头使用 @objc 标记它们。

    最后,如果它们是不同模块的一部分,您需要将 Swift 中的类和方法标记为 public。公共不是默认访问权限。

    【讨论】:

      【解决方案3】:

      欢迎来到 StackOverflow,山姆!您将需要一个桥接头来将 Objective C 代码与 swift 代码连接起来。 Here 是一个关于如何创建桥接头的视频,如果您还没有的话。如果此答案对您有帮助,请单击复选标记使其正确,然后单击向上箭头帮助我!

      【讨论】:

      • 桥接头用于调用 Obj-C 代码 Swift 代码,而不是相反。
      • 对,除非我看错了,否则他想将 obj c 代码从 pod 获取到他的 swift 项目中
      【解决方案4】:

      复制并粘贴您希望在#import 语句旁边使用的确切头文件名.h 文件。你不需要导入你的project_name,你需要你想要使用的头文件。我会将此放在评论中,但我在这里有点新,我想我还不允许发表评论。

      例如,如果您想在项目中使用 SWRevealViewController.h,您需要

      #import "SWRevealViewController.h"
      

      在您的桥接头文件中

      希望对你有帮助

      【讨论】:

        【解决方案5】:

        只需在项目的根目录准备桥接头,然后重新构建项目。

        【讨论】:

          【解决方案6】:

          只需在项目的根目录中创建桥接头文件,然后在构建设置中设置路径。

          【讨论】:

            【解决方案7】:

            周围有很多困惑,很多人回答相反的问题(从 Swift 调用 Obj C)。

            Apple 文档很清楚地列出了 here

            一个警告,我创造了

            import UIKit
            import Foundation
            
            @objc open class MySwiftViewClass: UIView {
            
                    // this next call becomes 
                    //    [myDaBar myFuncWithString:aString];  
                    @objc open func myFunc(withString:String) {
                    let greeting = "Hello!"
                }
            }
            

            正如您在评论中看到的,成员函数 myFunc 获取附加到它的变量名称。

            你也可以在生成的头文件中看到

            /Users/<yourname>/Library/Developer/Xcode/DerivedData/TargetName-bthdvookrisgtractdotackhxhjh/Build/Intermediates.noindex/TargetName.build/Debug-iphonesimulator/ProductName.build/DerivedSources/Project-Name-Swift.h
            

            【讨论】:

              猜你喜欢
              • 2015-07-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-11
              相关资源
              最近更新 更多