我按照这里的指南创建了一个涡轮模块。这很好。
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?
对于您的示例,您根本不需要桥接头。这允许您将 ObjC 导入 Swift,而不是将 Swift 导入 ObjC。你试过只删除
SWIFT_OBJC_BRIDGING_HEADER
位吗?
RTNCalculator-Swift.h
标头可让您将 Swift 导入 ObjC,并且您的那部分代码看起来没问题。如果您取出桥接头,您会收到什么具体错误?