source

Swift를 React-Native로 브리징할 때 "인식된 Objective-C 메서드가 아닙니다"가 표시됨

lovecheck 2023. 3. 23. 22:51
반응형

Swift를 React-Native로 브리징할 때 "인식된 Objective-C 메서드가 아닙니다"가 표시됨

가이드에 따라 React-Native 0.33 코드를 매우 간단한 Swift 메서드에 브리지하려고 합니다만, 얻을 수 있는 것은 이것뿐입니다.show:(NSString *)name is not a recognized Objective-C method.

제 코드는 다음과 같습니다.

Switch Manager.swift

import Foundation

@objc(SwitchManager)
class SwitchManager: NSObject {

  @objc func show(name: String) -> Void {
    NSLog("%@", name);
  }

}

Switch Manager Bridge.h

#import "RCTBridgeModule.h"

@interface RCT_EXTERN_MODULE(SwitchManager, NSObject)

RCT_EXTERN_METHOD(show:(NSString *)name)

@end

Switch Manager-Bridging-Header.h

#import "RCTBridgeModule.h"

그럼 내 위에서index.ios.js스위치 매니저를 Import할 파일import { SwitchManager } from 'NativeModules';및 호출SwitchManager.show('One');여기서 오류가 발생했습니다.

뭐가 잘못됐는지 모르겠어요.

이는 Swift 3의 변경 사항 중 일부이며 밑줄을 추가하면 해결할 수 있습니다.

import Foundation

@objc(SwitchManager)
class SwitchManager: NSObject {

  @objc func show(_ name: String) {
    NSLog("%@", name);
  }

}

Swift 3의 0046 제안 참조: Swift.org 이행가이드의 "Consistent first argument labels"에서 호출된 첫 번째 라벨을 포함하여 모든 파라미터에서 일관된 라벨 동작을 확립합니다.

기본적으로 Objective-C의 Swift 방식은 Swift 3를 통해 바뀌었다.

편집: 이는 Swift 4에서도 마찬가지입니다.여기서 "Ompting Argument Labels" (인수 라벨 생략)

이것은 xcode 8.0과 swift 3에서 나에게 효과가 있었다.

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

더하다_라벨이 붙어 있지 않은 멤버에게

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

목적에서 알 수 있듯이 c 메서드 이름은 레이블이 없는 매개 변수 추가입니다._그것을 재빠르게 처리하다.

나는 이 문제로 하루 종일 싸웠다.다음과 같이 Swift 컴파일러가 레거시 버전을 사용하도록 설정함으로써 해결됩니다(XCode 8은 Swift 3을 선호합니다).

[ Build Settings ]> [ Use Legacy Swift Language Version ](레거시 스위프트 언어 버전 사용)까지 스크롤 다운합니다.

기능 선언 전에 데코레이터 @objc를 넣는 것을 잊어버려서 같은 오류가 발생했습니다.

언급URL : https://stackoverflow.com/questions/39692230/got-is-not-a-recognized-objective-c-method-when-bridging-swift-to-react-native

반응형