2017-08-28 79 views
0

我正在嘗試使用我可以在我的JavaScript代碼中調用的函數創建本機swift模塊。目前我有我的module.swift文件,我的module.m文件和橋接頭。React Native Swift模塊中的回調函數

這裏的MyModule.swift:

import Foundation 

@objc(MyModule) 
class MyModule: NSObject { 

    @objc func callbackMethod(callback: RCTResponseSenderBlock) -> Void { 
    let resultsDict = [ 
    "success" : true 
    ]; 

    callback([NSNull() ,resultsDict]) 
    } 

} 

這裏的MyModule.m:

#import <Foundation/Foundation.h> 

// CalendarManagerBridge.m 
#import <React/RCTBridgeModule.h> 
#import <React/RCTEventEmitter.h> 

@interface RCT_EXTERN_MODULE(MyModule, NSObject) 

RCT_EXTERN_METHOD(callbackMethod:(RCTResponseSenderBlock)callback) 

@end 

這裏的橋接報:

#import React/RCTBridgeModule.h 

#import React/RCTEventEmitter.h 

最後,這裏是我的電話在javascript:

const { MyModule } = require('NativeModules'); 
MyModule.callbackMethod((err,r) => console.log(r)); 

的問題是,每當我運行該項目,它會導致一個錯誤:

Exception 'callbackMethod:(RCTResponseSenderBlock)callback is not a recognized Objective-c 
method.' 

但是,我找不到任何錯誤的文檔。有人可以提供一些幫助嗎?

+0

您使用永葆回調其在這裏需要兩個參數,你傳遞一個字典作爲第二個參數接受,但作爲nsnull第一,爲什麼?我認爲第一個參數是這樣的回調中的布爾值,嘗試傳遞true而不是nsnull,第二個RCTResponseSenderBlock是您提供的一個塊或一種類型的callBack名稱。如果它的一個塊是在模塊中註冊的? –

回答

1

由於某些原因,我們現在需要針對不同方法編寫@objc部件。

變化

@objc func callbackMethod(callback: RCTResponseSenderBlock) -> Void { 
let resultsDict = [ 
"success" : true 
]; 

callback([NSNull() ,resultsDict]) 

@objc(callbackMethod:) 
func callbackMethod(callback: RCTResponseSenderBlock) -> Void { 
let resultsDict = [ 
"success" : true 
]; 

callback([NSNull() ,resultsDict])