我正在尝试将我的 React-Native 0.33 代码桥接到一个 super 简单的 Swift 方法,遵循 this guide但我得到的只是show:(NSString *)name is not a recognized Objective-C method
。
这是我的代码:
开关管理器.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"
然后在我的 index.ios.js
文件中,我使用 import { SwitchManager } from 'NativeModules';
导入 SwitchManager 并调用 SwitchManager.show( '一个');
。这就是错误发生的地方。
不确定哪里出了问题。
最佳答案
这是Swift 3的一部分改动,可以通过加下划线解决:
import Foundation
@objc(SwitchManager)
class SwitchManager: NSObject {
@objc func show(_ name: String) {
NSLog("%@", name);
}
}
参见 Swift 3 的 0046 Proposal: Establish consistent label behavior across all parameters including first labels在 Swift.org migration guide 中被调用在“一致的第一个参数标签”下。
基本上,Objective-C 看待 Swift 方法的方式在 Swift 3 中发生了变化。
编辑:在 Swift 4 中仍然如此,see docs here under Omitting Argument Labels .
关于objective-c - 将 Swift 桥接到 React-Native 时得到 "is not a recognized Objective-C method",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39692230/