我正在尝试使用 Objective-C 模块封装 native C++ 代码。这很好用。 接下来我尝试使用 Swift 中的那个模块,但我无法使用 Swift 代码中的 Objective-C 类。我已经尝试构建两个单独的模块或一个具有两个目标的模块 - 相同的错误“使用未解析的标识符'Bridge'”以及一个警告,即 umbrella 目录 ../Objective-CCode/include 未找到。
我猜想缺少 Objective-C 和 Swift 之间的桥接 header 。在混合代码环境中,此 header 是自动生成的,但不在包管理中。
缺少什么或我的错是什么?我附上了我的问题的一个小例子。
"Package.swift" Package description.
// swift-tools-version:5.1
import PackageDescription
let package = Package(
name: "MixedExample",
products: [
.library(
name: "MixedExample",
targets: ["SwiftCode", "Objective-CCode"]),
],
dependencies: [
],
targets: [
.target(name: "SwiftCode", dependencies: ["Objective-CCode"]),
.target(name: "Objective-CCode", dependencies: []),
]
)
Module "Objective-CCode" with Objektive-C code: "Bridge.h"
#include <Foundation/Foundation.h>
@interface Bridge : NSObject
-(void) printHello;
@end
"Bridge.m"
#include "Bridge.h"
@implementation Bridge : NSObject
-(void)printHello {
fprintf(stdout, "Hello from ExampleBridge\n");
}
@end
Module "SwiftCode" with Swift code
import Foundation
import Objective_CCode
class Examples {
let e = Bridge() // compiler error here
func printH() {
e.printHello()
}
}
最佳答案
与此同时,我搜索了 umbrella 目录,找到了解决方案。
本文https://medium.com/allatoneplace/challenges-building-a-swift-framework-d882867c97f9解释了从 swift 调用 C* 类所需的伞目录的用法。
对于上面的例子,解决方案是
Add an include directory to the Objective-C package with the following file "MixedExample.h"
#include "../Bridge.h"
https://stackoverflow.com/questions/58259478/
相关文章:
ios - 如何使用 SPM 和 Xcode11 将二进制文件与库链接
image - fluttercandies extended_image.如何用 1 根手指双击而
c# - 是否可以动态更改 ToolbarItem 的图标?
firebase - 使用 react-native-firebase 在 React Native
asp.net-core-webapi - .NET Core 3 API - 在一个请求后停止工作
reactjs - React Native - SetTimeout() 不工作。 t.apply
angular - 运行 karma 测试时出现错误无法读取 null 的属性 'extras'