我正在尝试将我的Swift视图与我的React-Native项目相关联。我想出了如何显示它,但现在当我尝试设置属性时,我收到此错误消息:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Switch setMessage:]: unrecognized selector sent to instance 0x7f96b270de70'
在我的本机代码中,我正在做:
const SwitchNative = requireNativeComponent('Switch', Switch);
class Switch extends Component {
render() {
return (
<SwitchNative message="message will be" style={this.props.style} />
);
}
}
然后在我的 SwiftBridge 中执行此操作:
// SwiftBridge.h
#import "RCTView.h"
@interface SwitchBridge : RCTView
@property (nonatomic, assign) NSString *message;
@end
// SwiftBridge.m
#import "RCTBridgeModule.h"
#import "RCTViewManager.h"
#import "SwitchBridge.h"
@interface RCT_EXTERN_MODULE(SwitchManager, RCTViewManager)
RCT_EXPORT_VIEW_PROPERTY(message, NSString)
@end
最后我在Swift课程中Switch.swift
:
...
public func setMessage(message: String) {
NSLog("It's working well");
}
...
不确定为什么找不到我的setMessage
功能。
答案 0 :(得分:5)
React Native正在尝试调用-[Switch setMessage:]
,但您已定义-[Switch setMessage]
而没有任何参数。在Swift方法签名中添加一个参数:
public func setMessage(_ message: String)
您可能还需要使用@objc
注释您的方法,具体取决于您的Swift版本。
答案 1 :(得分:0)
正确的语法现在是swift,
@objc(setMessage:)
public func setMessage(message: String) {
NSLog("It's working well");
}
这是Swift的变化&gt; 3.2,Mac High Sierra和React Native&gt; = 0.43
答案 2 :(得分:0)
对于任何可能正在搜索从 React-Native 传递对象数组的人(我在这样做时遇到了这个问题):
YourView.h
:
@interface YourView : RCTView
@property (nonatomic, assign) NSMutableArray *markers;
@end
YourView.m
:
...
RCT_CUSTOM_VIEW_PROPERTY(markers, NSMutableArray, YourView)
{
[view setMarkers:json];
}
YourView.swift
:
@objc(setMarkers:)
public func setMarkers(json: NSMutableArray) {
}