run react new create cli app objective-c swift reactjs react-native

objective-c - new - react native run android



Obtuvo "no es un método reconocido de Objective-C" cuando se conecta Swift para React-Native (3)

Estoy tratando de vincular mi código React-Native 0.33 a un método Swift súper simple, siguiendo esta guía, pero todo lo que estoy obteniendo es show:(NSString *)name is not a recognized Objective-C method .

Aquí está mi código:

SwitchManager.swift

import Foundation @objc(SwitchManager) class SwitchManager: NSObject { @objc func show(name: String) -> Void { NSLog("%@", name); } }

SwitchManagerBridge.h

#import "RCTBridgeModule.h" @interface RCT_EXTERN_MODULE(SwitchManager, NSObject) RCT_EXTERN_METHOD(show:(NSString *)name) @end

SwitchManager-Bridging-Header.h

#import "RCTBridgeModule.h"

Luego, en mi archivo index.ios.js , estoy importando SwitchManager con import { SwitchManager } from ''NativeModules''; y llamando a SwitchManager.show(''One''); . Aquí es donde ocurrió el error.

No estoy seguro de lo que está mal.


Esto es parte de los cambios de Swift 3 y se puede resolver agregando un guión bajo:

import Foundation @objc(SwitchManager) class SwitchManager: NSObject { @objc func show(_ name: String) { NSLog("%@", name); } }

Consulte la Propuesta 0046 de Swift 3 : establezca un comportamiento de etiqueta coherente en todos los parámetros, incluidas las primeras etiquetas que se describen en la guía de migración de Swift.org en "Etiquetas de primeros argumentos consistentes".

Básicamente, la forma en que Objective-C ve los métodos Swift ha cambiado con Swift 3.

EDITAR: este sigue siendo el caso en Swift 4, vea los documentos aquí en Omitir las etiquetas de argumentos .


Estuve peleando con este tema todo el día. Resuelto al configurar Swift Compiler para que use versiones anteriores (XCode 8 es Swift 3), así que en:

Configuraciones de compilación > Desplácese hacia abajo hasta '' Usar versión de idioma Swift heredada '' establecida como


esto funcionó para mí en xcode 8.0 y swift 3

@objc func openPresentedViewController(_ name: String,name1: String,name2: String){ }

agregar _ a los miembros no etiquetados

RCT_EXTERN_METHOD(methodName:(NSString *)name name1:(NSString *)name1 name2:(NSString *)name2)

Como puede ver en el objetivo, el nombre del método c es un parámetro no marcado agregue _ en el método swift