- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 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/
我是一名优秀的程序员,十分优秀!