Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在同一框架内将专用Objective-C头导入Swift_Objective C_Swift_Xcode_Llvm - Fatal编程技术网

在同一框架内将专用Objective-C头导入Swift

在同一框架内将专用Objective-C头导入Swift,objective-c,swift,xcode,llvm,Objective C,Swift,Xcode,Llvm,我们目前有一个遗留的Objective-C框架,我们想在其中引入一些Swift组件。但是,我不知道如何从Swift文件中访问私有和项目范围的Objective-C文件 我们已经使用了一个伞形头和一个modulemap文件来声明应该包含在库模块中的公共头,我们希望将它们作为唯一公开的文件。但是,我们的新Swift文件(在同一框架内)还需要访问我们不想公开的私有头 我已经尝试过定义一个私有modulemap文件,列出我想要使用的私有头,然后用modulemap_private_file build设

我们目前有一个遗留的Objective-C框架,我们想在其中引入一些Swift组件。但是,我不知道如何从Swift文件中访问私有和项目范围的Objective-C文件

我们已经使用了一个伞形头和一个modulemap文件来声明应该包含在库模块中的公共头,我们希望将它们作为唯一公开的文件。但是,我们的新Swift文件(在同一框架内)还需要访问我们不想公开的私有头

我已经尝试过定义一个私有modulemap文件,列出我想要使用的私有头,然后用modulemap_private_file build设置指定它,但我认为这并不是我们想要的。它似乎引入了一个新的MyLibrary.Private模块,该模块对外部目标(如单元测试目标)公开可见,但框架内的Swift文件仍然不可用

任何关于如何实现这一点的建议,或在其他项目中的经验,都将非常感谢


谢谢

我最近也有同样的问题。情况是,您可以用另一种方法来实现,只需将Swift内部暴露于Objective-C。通过一些手动操作,它将允许您在Swift内部使用Objective-C类(内部和同一框架目标),而不会实际将ObjC暴露于Swift

这个案例有点太复杂了,无法将所有内容都粘贴到这里。我正在为我的文章添加一个关于这个主题的链接。这是总的想法:

  • 使用Swift协议模拟Objective类
  • 在您的swift代码中使用此协议
  • 在内部向Objective-C公开这些Swift协议(需要手动操作)
  • 通过ObjC类采用这些协议
  • 在Swift中创建并在ObjC中公开一个工厂,该工厂将创建这些协议的实例
  • 在工厂中创建方法,该方法将允许您注册具体类型,并将它们公开给ObjC
  • 在Swift工厂中注册Objective-C代码中的ObjC类型
  • 使用工厂实例化ObjC类,而不向Swift实际公开ObjC(hurray;)