【问题标题】:importing swift framework into a objective-c project将swift框架导入objective-c项目
【发布时间】:2015-09-14 23:12:27
【问题描述】:

我正在像这样将 swift 框架导入到 Objective-c 项目中:

@import MyFramework;

问题是我正在导入框架的类只能识别部分类。

被识别的类:

public class RecognizedClass:UIViewController, WKNavigationDelegate, WKScriptMessageHandle 
 { ... } 

不是的类:

public class VeediUtils
{ ... } 

它们都是公开的,为什么第一个在工作区中被识别而另一个没有?

我还在头文件 MyFramework-Swift.h 中看到一个类

@interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler>

出现而对方不出现

这是为什么呢?

还要指出,当我将 swift 框架导入到 swift 项目时,同样的过程会起作用

【问题讨论】:

    标签: ios objective-c swift ios-frameworks


    【解决方案1】:

    如果您之前将 Project 配置为与 Swift 集成并希望使用 Swift Dynamic Framework,则必须以这种方式导入它(根据您的项目将 {value} 替换为适当的名称):

    #import <{MyFramework}/{MyFrameworkMainClass}-Swift.h>  
    #import "{YourProjectTargetName}-Swift.h"
    

    编辑:

    如果您的框架将Defines Module 设置为true,那么您可以像这样导入它:

    @import MyFramework;
    

    【讨论】:

    • 我无法使用 paperonboarding:#import "paper-onboarding/PaperOnboarding-Swift-h" 不起作用
    【解决方案2】:

    要访问 objc 中的 swift 类,它不是从 NSObject 继承的,您需要:

    @objc 公共类 VeediUtils

    必须用 @objc 属性标记 Swift 类或协议才能在 Objective-C 中访问和使用。这个属性告诉编译器这段 Swift 代码可以从 Objective-C 访问。如果您的 Swift 类是 Objective-C 类的后代,编译器会自动为您添加 @objc 属性。

    https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

    【讨论】:

      【解决方案3】:

      您必须将@objc 添加到VeediUtils 类的声明中,或使其继承自NSObject。否则它对 Objective-C 是不可见的。

      在您的情况下,RecognizedClass 被识别,因为它是 UIViewController 的子类,NSObject 的子类。

      【讨论】:

      • UIViewController 迟早也会成为一个 Swift 类
      【解决方案4】:

      在 Objective-C 中使用 Swift 类

      如果您要在 App Target 中导入代码(在一个项目中混合 Objective-C 和 Swift),您应该使用下一个导入行 #import "&lt;#YourProjectName#&gt;-Swift.h" 将 Swift 代码公开给 Objective-C 代码 [Mixing Swift and Objective-C code in a project]

      在这篇文章中,我将描述如何将 Swift 框架导入到 Objective-C 代码中

      Objective-C 消费者 -> Swift 动态框架

      Xcode 版本 10.2.1

      创建一个 Swift 框架

      关注Create Swift framework

      公开 Swift API。从 Objective-C[About] 使用 Swift 的函数

      Objective-C 消费者

      关注Using Swift framework

      将模块导入Objective-C客户端代码[module_name]

      @import module_name;
      

      [More examples here]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-17
        • 2023-04-10
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        相关资源
        最近更新 更多