Не удается скомпилировать пакет Swift, использующий пакет Objective-C - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь добавить собственный код C ++ в модуль Objective-C. Это отлично работает. Далее я пытаюсь использовать этот модуль из Swift, но я не могу использовать класс Objective-C из кода Swift. Я попытался создать два отдельных модуля или один модуль с двумя целями - та же ошибка " Использование неразрешенного идентификатора 'Bridge' ", а также предупреждение о том, что зонтичный каталог ../Objective-Code / 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: []),    
    ]
)

Модуль "Objective-CCode" с кодом Objektive-C: "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

Модуль "SwiftCode" с кодом Swift

import Foundation
import Objective_CCode

class Examples {

    let e = Bridge()   // compiler error here

    func printH() {
        e.printHello()
    }
}

1 Ответ

0 голосов
/ 07 октября 2019

Тем временем я искал зонтичный каталог , который привел меня к решению.

В этой статье https://medium.com/allatoneplace/challenges-building-a-swift-framework-d882867c97f9 объясняется использование зонтичного каталога, который необходим для вызова классов C * из swift.

Для приведенного выше примера решение будет

Добавьте каталог включения в пакет Objective-C со следующим файлом "MixedExample.h"

#include "../Bridge.h"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...