0

Ich versuche, ein natives Swift-Modul mit einer Funktion zu erstellen, die ich in meinem JavaScript-Code aufrufen kann. Momentan habe ich meine module.swift Datei, meine module.m Datei und den Überbrückungs-Header.Callback-Funktionen in Native Swift-Module reagieren

hier MyModule.swift:

import Foundation 

@objc(MyModule) 
class MyModule: NSObject { 

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

    callback([NSNull() ,resultsDict]) 
    } 

} 

hier 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 

Hier ist das Brückenkopf:

#import React/RCTBridgeModule.h 

#import React/RCTEventEmitter.h 

Schließlich ist hier mein Anruf in javascript:

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

Das Problem ist, dass, wenn ich das Projekt ausführen, es einen Fehler verursacht:

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

aber ich kann nichts falsch mit der Dokumentation. Könnte jemand bitte etwas Hilfe geben?

+0

Sie verwenden lebendig Rückruf halten, die hier zwei Parameter müssen, sind vorbei Sie ein Wörterbuch als zweiten Parameter akzeptiert, aber nsnull als erste warum? Ich denke, der erste Parameter ist ein Bool in solchen Rückfragen versuchen, statt nsnull wahr und zweite RCTResponseSenderBlock ist dies ein Block oder eine Art von CallBack-Namen von Ihnen zur Verfügung gestellt. Wenn es ein Block ist, ist es in Modulen registriert? –

Antwort

1

Aus irgendeinem Grund müssen wir den @objc Teil für Methoden jetzt anders schreiben.

ändern

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

callback([NSNull() ,resultsDict]) 

Um

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

callback([NSNull() ,resultsDict])