gpt4 book ai didi

Swift <-> React Native Bridge 重复接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:34 26 4
gpt4 key购买 nike

我目前正尝试在 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

这有效!希望这个回答对你有帮助

关于Swift <-> React Native Bridge 重复接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39661686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com