gpt4 book ai didi

ios - 导入混合框架时在 iOS 应用程序中找不到 Swift 类

转载 作者:搜寻专家 更新时间:2023-10-31 22:45:01 26 4
gpt4 key购买 nike

我有一个框架 Objective-CSwift混合在一起。它单独编译,但是当我将它导入到 Objective-C 中时iOS 应用程序,Swift找不到类,但 Objective-C类被发现。导入时我的 Swift 类在框架内找到 MyFramework-Swift.hiOS app 和 framework 是同一工作区中的两个不同项目。

Defines ModuleEmbedded content contains Swift Code设置为 Yes对于所有目标和我的 Swift类是公开的 @objc

我尝试使用 @import MyFramework#import <MyFramework/MyFramework-Swift.h>没有成功。

我没有看到 MyFramework-Swift.h将框架的 Headers 目录中的头文件添加到项目中。不确定这是否正常。它在 DerivedData 中生成

编辑:我设法在 Xcode 8 中用一个非常简单的工作区重现了这个问题(但在 7.3 中可能相同):

  • 创建一个新的 Cocoa 触控框架 TestFramework在 Objective-C 中
  • 创建 A.h文件

    @class B;

    @interface A : NSObject

    -(void)print:(B*)caller;

    @end
  • 创建 A.m文件

    #import <Foundation/Foundation.h>
    #import "TestFramework-Swift.h"

    #import "A.h"

    @implementation A

    -(void)print:(B*)caller {
    [caller test];
    }
  • 创建 B.swift文件

    import Foundation

    @objc public class B : NSObject {
    public func test() {
    print("test");
    }
    }
  • 设置A.h作为公共(public) header

  • 进口A.h进入TestFramework.h
  • 尝试编译框架

这里是 TestFramework-Swift.h没有找到

  • 设置Install Objective-C compatibility headerNo
  • 尝试编译框架

现在可以编译了!

  • 创建一个新的 iOS Objective-C 单 View 应用 App
  • 像这样更新 ViewController.m

     #import "ViewController.h"
    @import TestFramework;

    @interface ViewController ()

    @end

    @implementation ViewController

    - (void)viewDidLoad {
    [super viewDidLoad];
    B* b = [[B alloc] init];
    A* a = [[A alloc] init];
    [a print: b];
    }
    [...]
    @end

B 上应该有错误,A 上没有。我还设置了 Defines ModuleYes在两个项目中都没有成功

最佳答案

好吧,我终于找到了答案。 Install Objective-C compatibility header必须设置为 Yes并且导入必须是 #import <TestFramework/TestFramework-Swift.h>而不是 #import "TestFramework-Swift.h"框架内

关于ios - 导入混合框架时在 iOS 应用程序中找不到 Swift 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39374266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com