gpt4 book ai didi

objective-c - 无法编译使用 Objective-C 包的 Swift 包

转载 作者:行者123 更新时间:2023-12-05 07:18:33 25 4
gpt4 key购买 nike

我正在尝试使用 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"

关于objective-c - 无法编译使用 Objective-C 包的 Swift 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58259478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com