2016-09-23 2 views
4

私は現在、Swiftでカスタムモジュールを作り、それをReact Nativeに橋渡ししようとしています。私はRNのドキュメント、さらには自分のコードにコメント1からのチュートリアルに従ってきましたが、私は、次のコンパイルエラー得続ける:Swift <->リアクションネイティブブリッジ重複インターフェイス

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) 
     } 
    } 


} 
+0

Objective-Cクラスで同じ問題が発生しましたが、フレームワークからブリッジしようとしています。これが私が見つけることができる唯一の結果です。 – Luke

+0

これはなぜ起こったのですか? –

+0

Objective-Cコードに '#import" MyProject-Swift.h "'のようなインポートがありませんか? –

答えて

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) 
     } 
    } 
} 
} 

RN 0.45.1、スウィフト3で解決策を見つけました

この作品

#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 

、ファイル

ReactManagerBridge.mファイル内
#import <React/RCTBridgeModule.h> 
@interface ReactManagerBridge : NSObject <RCTBridgeModule> 
@end 

ReactManagerBridge.h中! この回答は役に立ちました

関連する問題