我目前正在尝试在
Swift中创建一个自定义模块并将其桥接到React Native.我已经按照RN文档中的教程,甚至是他们的代码中的评论,但我不断收到以下编译错误:
Duplicate interface definition for class 'StorageManager'
有人知道如何解决这个错误?
桥.m文件:
#import "RCTBridgeModule.h" @interface RCT_EXTERN_MODULE(StorageManager,NSObject) RCT_EXTERN_METHOD(getAccessToken:(RCTPromiseResolveBlock*)resolver reject:(RCTPromiseRejectBlock*)reject) RCT_EXTERN_METHOD(getRefreshToken:(RCTPromiseResolveBlock*)resolver reject:(RCTPromiseRejectBlock*)reject) RCT_EXTERN_METHOD(getSelectedNetworkId:(RCTPromiseResolveBlock*)resolver reject:(RCTPromiseRejectBlock*)reject) @end
快速实施
import Foundation @objc(StorageManager) class StorageManager: NSObject { @objc func getAccessToken(resolver:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) { let accessToken = Shared.getObjectPrefs("access_token") if(accessToken != nil){ resolver(accessToken) } else { reject("no_access_token","No access token present",nil) } } @objc func getRefreshToken(resolver:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) { let refreshToken = Shared.getObjectPrefs("refresh_token") if(refreshToken != nil){ resolver(refreshToken) } else { reject("no_refresh_token","No refresh token present",nil) } } @objc func getSelectedNetworkId(resolver:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) { let networkId = Shared.getObjectPrefs("current_network_id") if(networkId != nil){ resolver(networkId) } else { reject("no_network_id","No network id present",nil) } } }
解决方法
我在Swift 3,RN 0.45.1中找到了解决方案
在您的ReactManager.swift文件中
import Foundation import React @objc(ReactManager) class ReactManager: NSObject { var bridge: RCTBridge! @objc func addEvent(name: String,location: String,date: NSNumber) -> Void { // Date is ready to use! } @objc func dismissPresentedViewController(_ reactTag: NSNumber) { DispatchQueue.main.async { if let view = self.bridge.uiManager.view(forReactTag: reactTag) { print(view) let presentedViewController = view.reactViewController() guard let vc = presentedViewController else { return } vc.navigationController?.pop(animated: true) } } } }
在ReactManagerBridge.h文件中
#import <React/RCTBridgeModule.h> @interface ReactManagerBridge : NSObject <RCTBridgeModule> @end
在ReactManagerBridge.m文件中,
#import "ReactManagerBridge.h" #import "zigbang-Swift.h" @implementation ReactManagerBridge RCT_EXPORT_MODULE(ReactManager); RCT_EXPORT_METHOD(dismissPresentedViewController:(nonnull NSNumber *)reactTag) { ReactManager* reactManager = [[ReactManager alloc] init]; [reactManager dismissPresentedViewController:reactTag]; } RCT_EXTERN_METHOD(addEvent:(NSString *)name location:(NSString *)location date:(nonnull NSNumber *)date) @end
这个有效!希望这个答案可以帮到你
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。