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

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

相关文章:

typescript - 排版组件

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'

php - 如何修复 stripe-php 没有这样的 payment_method 错误

reactjs - 如何在更改层次结构后保持状态并防止重新渲染 react 组件?