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

时间:2019-10-02 22:57:06

标签: objective-c swift static-libraries bridging-header swift-framework

我有一个3d party预编译的swift框架,我们称它为// Model objective function 3X + 4Y IntVar OBJ = model.intVar("objective", 0, 999); model.scalar(new IntVar[]{X,Y}, new int[]{3,4}, OBJ)).post(); // Specify objective model.setObjective(Model.MAXIMIZE, OBJ); (无源代码访问,只有该框架),我需要在自己的Objective-C静态库中使用它(这是我的情况)。我已经创建了一个Objective-C静态库,我们将其称为SomeCoolSwiftFramework,将其拖放到该框架中,并在要使用该框架的地方创建了一个新类:

MyCoolObjCLibrary

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

在添加3d零件框架的依赖项时我错过了任何步骤吗?

1 个答案:

答案 0 :(得分:2)

事实证明,由于3d第三方SDK library(ggmap) stores <- data.frame((read.csv(file="./mapData") # Fetch the map madison = get_map(location = location, source = "osm") # Draw the map madisonMap = ggmap(madison) # Add the points layer madisonMap = madisonMap + geom_point(data = stores, aes(x = Longitude, y = Latitude, colour = Color), size = 5) 并未遵循规则来正确公开ObjC使用的必需类,因此生成的标头没有必需的声明,而我看不到它们。

ObjC使用的Swift成员的规则是:

  • 标有 Latitude, Longitude, Seed, Color 45.508785, -122.632101 , 8, #22DD00 45.515093, -122.642574, 11, #55AA00 45.485144, -122.596184, 15.3, #9F6000 的班级或成员
  • 一个类继承了SomeCoolSwiftFramework
  • 标有public的课程
  • 标有NSObject的成员

为克服3d参与者框架的这一限制,我创建了自己的具有3d参与者依赖性的快速框架objc(<name>),公开了我的代码所需的所有API,并应用了上面的规则,并确保{{ 1}}已正确生成并具有必需的声明。完成后,我可以将生成的objc文件导入ObjC静态库(或ObjC代码中的其他任何位置),并访问所需的代理类/方法。

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

SomeCoolSwiftFrameworkProxy

我发现this blog post回答了我的问题