экспортировать метод из быстрого или нативного метода в реагирующий нативный - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть быстрый класс, который я выставляю реагирующим-родным, внутри которого у меня есть функция, которая также выставляется реагирующим-нативным. Теперь, когда реагируют на собственные вызовы этой функции, она делает это внутренне, но через некоторое время возвращает объект.

Теперь он будет вызывать определенную функцию, которая получит объект. Я не могу изменить параметр этой функции. Но у меня есть другая функция, на которую я хочу вернуться, чтобы отреагировать нативно. Как я могу это сделать.

  func AckCallback(response:APIResponse) -> Void
  {
    print(response)  

  }

для этой функции я не могу изменить параметр paremeter, потому что он использовался во многих местах, но я хочу вернуть этот ответ от этой функции к реагирующему. Если кто-нибудь знает эту проблему, пожалуйста, дайте мне знать.

  @objc func sendEvent(_ response: APIResponse, callback: (NSObject) -> ()) 
-> Void {

    callback( [[
      "responseCode" : "Working",
      ]] as NSObject)

  }

Я просто хочу знать, как использовать этот sendEvent внутри AckCallback, или есть какой-то другой способ отправить это **

ответ: APIResponse

**

реагировать-родной.

1 Ответ

1 голос
/ 01 апреля 2019

Для первого создания класса Swift (например, YourModule.swift)

//
//  YourModule.swift
//

@objc(YourModule)
class YourModule: NSObject {

  @objc func callNativeEvent(callback:RCTResponseSenderBlock) 
-> Void {

   // Here you can do your work and pass an object to the callback function.
  // You can save assign a `callback` to the class property (e.g self.eventCallback = callback)
// and invoke that self.eventCallback after the asynchronous code ol somewhere else
  NSObject *obj = [[NSObject alloc] init]; // your object here
   callback([NSNull(), obj]);
   // or if you want to return an error
   // callback(["Error calling NativeEvent", NSNull()]);

  // I'm not sure that RCTResponseSenderBlock works the same as in previous react-native versions. Maybe now you can pass an Object instead of an Array.
  }
}

Создать файл моста (например, YourModuleBridge.m)

//
//  YourModuleBridge.m
//

#import <Foundation/Foundation.h>
#import "UIKit/UIKit.h"

#import <React/RCTBridgeModule.h>


@interface RCT_EXTERN_MODULE(YourModule, NSObject)

RCT_EXTERN_METHOD(callNativeEvent:(RCTResponseSenderBlock)callback);

@end

Также вам нужен файл Bridging-Header, если он не существует в вашем проекте.

//
//  YourModule-Bridging-Header.h
//

#ifndef YourModule_Bridging_Header_h
#define YourModule_Bridging_Header_h

#if __has_include("RCTBridgeModule.h")
#import "RCTBridgeModule.h"
#else
#import <React/RCTBridgeModule.h>
#endif

#endif /* YourModule_Bridging_Header_h */

А от JS

import { NativeModules } from 'react-native';

const YourModule = NativeModules.YourModule;

...

YourModule.callNativeEvent((error, response) => {
  console.log('Error', error, 'Response', response);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...