我正在尝试使用Objective-C模块封装本机C ++代码。这很好。 接下来,我尝试使用Swift中的该模块,但无法使用Swift代码中的Objective-C类。我尝试构建两个单独的模块或一个具有两个目标的模块-相同的错误“ 使用未解决的标识符'Bridge'”,同时还警告了 umbrella目录 ..找不到/ Objective-CCode / include。
我猜想Objective-C和Swift之间的桥接头丢失了。在混合代码环境中,此标头是自动生成的,而不是在包管理中生成的。
缺少了什么或者是我的错?我附上了一个小例子来说明问题。
“ Package.swift”软件包说明。
// 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: []),
]
)
带有Objektive-C代码的模块“ Objective-CCode”: “ 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
带有Swift代码的模块“ SwiftCode”
import Foundation
import Objective_CCode
class Examples {
let e = Bridge() // compiler error here
func printH() {
e.printHello()
}
}
答案 0 :(得分:0)
同时,我搜索了伞目录,这使我进入了解决方案。
本文https://medium.com/allatoneplace/challenges-building-a-swift-framework-d882867c97f9解释了总括目录的用法,该总览目录是从swift调用C *类所必需的。
对于上面的示例,解决方案将是
使用以下文件“ MixedExample.h”将包含目录添加到Objective-C软件包中
#include "../Bridge.h"