如何在 React Native Turbo 模块中使用 Swift

问题描述 投票:0回答:1

我按照这里的指南创建了一个涡轮模块。这很好。

https://reactnative.dev/docs/the-new-architecture/pillars-turbomodules

我想在这个 turbo 模块中使用 Swift 代码。我尝试使用此代码添加一个 Swift 文件并修改

RTNCalculator.mm
,以便在从 Objective-C 调用的 Swift 中进行数字添加。

SwiftCalculator.swift

import Foundation

@objc class SwiftCalculator: NSObject {
    @objc func add(a: Double, b: Double) -> Double {
        return a + b
    }
}

RTN计算器.mm

#import "RTNCalculatorSpec.h"
#import "RTNCalculator.h"
#import "RTNCalculator-Swift.h"

@implementation RTNCalculator

RCT_EXPORT_MODULE()

- (void)add:(double)a b:(double)b resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
    SwiftCalculator *calculator = [SwiftCalculator new];
    double value = [calculator addWithA:a b:b];
    NSNumber *result = [[NSNumber alloc] initWithDouble:value];
    resolve(result);
}

- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
    (const facebook::react::ObjCTurboModule::InitParams &)params
{
    return std::make_shared<facebook::react::NativeCalculatorSpecJSI>(params);
}

@end

我还修改了 pod spec 文件以使用桥接头文件。

  s.pod_target_xcconfig = { 
    'SWIFT_OBJC_BRIDGING_HEADER' => '../../node_modules/rtn-calculator/ios/RTNCalculator-Bridging-Header.h'
  }

这行不通。我在项目中遇到这个错误。

Using bridging headers with framework targets is unsupported

如何在 Turbo 模块中使用 Swift?

swift objective-c react-native objective-c-swift-bridge react-native-turbomodule
1个回答
0
投票

对于您的示例,您根本不需要桥接头。这允许您将 ObjC 导入 Swift,而不是将 Swift 导入 ObjC。你试过只删除

SWIFT_OBJC_BRIDGING_HEADER
位吗?

RTNCalculator-Swift.h
标头可让您将 Swift 导入 ObjC,并且您的那部分代码看起来没问题。如果您取出桥接头,您会收到什么具体错误?

© www.soinside.com 2019 - 2024. All rights reserved.