use*_*265 5 xcode swift react-native
我目前正在尝试在Swift中创建一个自定义模块并将其桥接到React Native.我已经按照RN文档中的教程,甚至是他们的代码中的评论,但我不断收到以下编译错误:
Duplicate interface definition for class 'StorageManager'
Run Code Online (Sandbox Code Playgroud)
有人知道如何解决这个错误?
桥.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
Run Code Online (Sandbox Code Playgroud)
快速实施
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在 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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
ReactManagerBridge.h
在文件中
#import <React/RCTBridgeModule.h>
@interface ReactManagerBridge : NSObject <RCTBridgeModule>
@end
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
这有效!希望这个答案对你有帮助
归档时间: |
|
查看次数: |
739 次 |
最近记录: |