gpt4 book ai didi

objective-c - 从 ObjectiveC 静态库访问预编译的 Swift.Framework

转载 作者:搜寻专家 更新时间:2023-11-01 06:49:56 24 4
gpt4 key购买 nike

我有一个 3d 派对预编译的 swift 框架,我们称它为 SomeCoolSwiftFramework(没有源代码访问权限,只有框架),我需要在我自己的 Objective-C 静态库中使用它(它是我场景中的一个要求)。我已经创建了一个 Objective-C 静态库,我们称它为 MyCoolObjCLibrary,将框架拖放到那里并在我想使用该框架的地方创建一个新类:

@import Foundation;
@import SomeCoolSwiftFramework;
#import <SomeCoolSwiftFramework/SomeCoolSwiftFramework-Swift.h>
#import "MyCoolObjCLibrary.h"


@implementation MyCoolObjCLibrary

- testMe: NSString {
// I want to access classes from SomeCoolSwiftFramework here but cannot see them.
// `SomeCoolSwiftFramework` is not accessible here
return @"ObjC Value";
}

@end

如果我没有创建 ObjC 静态库,而是切换到 swift 静态库,它工作正常,我可以看到所需的类和方法。但就我而言,我不得不使用 ObjC 静态库,因此想了解如何从静态库访问 swift 框架。

我在添加对 3d 零件框架的依赖项时是否遗漏了任何步骤?

最佳答案

原来是因为 3d 派对 SDK SomeCoolSwiftFramework没有遵循正确公开 ObjC 使用的必需类的规则,生成的 header 没有必需的声明,我看不到它们。

ObjC 使用 Swift 成员的规则是:

  • 标有public 的类(class)或成员
  • 类继承NSObject
  • 一个标有objc(<name>)的类
  • 标有objc的成员

为了克服 3d 派对框架的这个限制,我创建了自己的 swift 框架 SomeCoolSwiftFrameworkProxy使用 3d 方依赖项,公开我的代码所需的所有 API,应用上面的规则并确保 SomeCoolSwiftFrameworkProxy-Swift.h已正确生成并具有所需的声明。一旦完成,我就可以导入生成的 SomeCoolSwiftFrameworkProxy-Swift.h在我的 ObjC 静态库(或我的 ObjC 代码中的任何其他地方)中创建文件并访问所需的代理类/方法。

我的代理 Swift 框架声明如下:

import Foundation;
import SomeCoolSwiftFramework;

@objc(SomeCoolSwiftFrameworkProxy)
public class SomeCoolSwiftFrameworkProxy : NSObject {

@objc
public func init() {
// access 3d party SDK methods/classes
SomeCoolSwiftFrameworkClass.sharedInstance.init()
}
}

我找到了 this blog post这回答了我的问题

关于objective-c - 从 ObjectiveC 静态库访问预编译的 Swift.Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58210328/

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