2015-08-07 5 views
6

Wie kann ich Ereignisse in Swift an JavaScript senden?Native Sendeereignisse an JavaScript in Swift melden

Es gibt Beispiele für Objc-Code, wie Ereignis an JavaScript senden, aber ich muss in swift tun?

#import "RCTBridge.h" 
#import "RCTEventDispatcher.h" 

@implementation CalendarManager 

@synthesize bridge = _bridge; 

- (void)calendarEventReminderReceived:(NSNotification *)notification 
{ 
    NSString *eventName = notification.userInfo[@"name"]; 
    [self.bridge.eventDispatcher sendAppEventWithName:@"EventReminder" 
               body:@{@"name": eventName}]; 
} 

@end 
+0

[Beitrag anzeigen] (https://github.com/facebook/react-native/issues/8714#issuecomment-234437319). –

Antwort

8

Ich habe gerade versucht, das herauszufinden. Es war tatsächlich überraschend einfach. Heres, wie ich tat es:

EventTests.m

#import "RCTBridgeModule.h" 

@interface RCT_EXTERN_MODULE(EventTests, NSObject) 

RCT_EXTERN_METHOD(testEvent:(NSString *)eventName) 

@end 

EventTests.Swift

import UIKit 

@objc(EventTests) 
class EventTests: NSObject { 
    // Swift doesn't have synthesize - just define the variable 
    var bridge: RCTBridge! 

    @objc func testEvent(eventName: String) { 
     self.bridge.eventDispatcher.sendAppEventWithName(eventName, body: "Woot!") 
    } 
} 

MyModule.js

var React  = require('react-native'); 
var EventTests = require('NativeModules').EventTests; 

var { 
    Component, 
    NativeAppEventEmitter 
} = React; 

var testEventName = 'test'; 

class MyModule extends Component { 

    constructor(options) { 
     super(options); 

     // Register for our test event 
     NativeAppEventEmitter.addListener(testEventName, (body) => { 
      console.log(body); 
     }); 

     // Call objective c function, which will emit our test event 
     EventTests.testEvent(testEventName); 
    } 
} 

module.exports = MyModule; 

Auch stellen Sie sicher, einige Importe in Ihrem Überbrückung Header enthalten:

#import "RCTBridge.h" 
#import "RCTEventDispatcher.h" 
+0

Wow, Süße. Ich musste es in Objc machen und schickte Objc Code von Swift –

+0

Ich habe dies an ein paar Swift anderen Klassen arbeiten, aber 'self.bridge' ist' nil', wenn in meinem AppDelegate verwendet. Irgendwelche Ideen? – jamesfzhang

+0

@jamesfzhang hast du es geschafft, self.bridge zu reparieren nil in AppDelegate – coldbuffet

Verwandte Themen