Ber*_*lue 5 objective-c swift objective-c-swift-bridge react-native react-native-turbomodule
我按照此处的指南创建了一个涡轮模块。这很好。
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
}
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我还修改了 pod 规范文件以使用桥接头文件。
s.pod_target_xcconfig = {
'SWIFT_OBJC_BRIDGING_HEADER' => '../../node_modules/rtn-calculator/ios/RTNCalculator-Bridging-Header.h'
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的。我在项目中遇到这个错误。
Using bridging headers with framework targets is unsupported
Run Code Online (Sandbox Code Playgroud)
如何在 Turbo 模块中使用 Swift?
对于您的示例,您根本不需要桥接标头。这允许您将 ObjC 导入 Swift,而不是 Swift 导入 ObjC。您是否尝试仅删除该SWIFT_OBJC_BRIDGING_HEADER位?
标RTNCalculator-Swift.h头可以让你将 Swift 导入 ObjC,这部分代码看起来没问题。如果取出桥接标头,您会收到什么具体错误?
| 归档时间: |
|
| 查看次数: |
729 次 |
| 最近记录: |