私は反応するのが初めてで、反応ブリッジモジュールに取り組んでいます。RCTConvert がどのように便利で、どのように使用できるかを知りたいだけです。このサイトの リンクをたどっています
お願いします、誰か私がこのことについて知るのを手伝ってください。
私は反応するのが初めてで、反応ブリッジモジュールに取り組んでいます。RCTConvert がどのように便利で、どのように使用できるかを知りたいだけです。このサイトの リンクをたどっています
お願いします、誰か私がこのことについて知るのを手伝ってください。
ヘルパー関数はRCTConvert
すべて、JSON 値を入力として受け入れ、それをネイティブの Objective-C 型またはクラスにマップします。NSString
、NSNumber
、などのサポートされている基本的な入力パラメータ タイプを、React ブリッジでサポートされていない 、 などのNSArray
他NSDictionary
のタイプに変換すると便利です。例えば:NSURL
UIColor
CGRect
Java スクリプト:
Module.setPosition({x : 10, y: 20});
オブジェクトC:
RCT_EXPORT_METHOD(setPosition:(id)position) {
CGPoint point = [RCTConvert CGPoint:position];
NSLog(@"x: %f, y: %f", point.x, point.y);
}
// Prints: x: 10.000000, y: 20.000000
また、カスタム タイプのマクロを拡張することもできRCTConvert
ます。RCT_CUSTOM_CONVERTER
Java スクリプト:
Module.addUser({name : 'John', email: 'joghn@domain.com'});
オブジェクトC:
typedef struct {
NSString* name;
NSString* email;
} User;
User createUser(NSString* name, NSString* email) {
User user;
user.name = name;
user.email = email;
return user;
};
@implementation RCTConvert (User)
RCT_CUSTOM_CONVERTER(User, User, createUser(json[@"name"], json[@"email"]) )
@end
...
RCT_EXPORT_METHOD(addUser:(id)user) {
User new_user = [RCTConvert User:user];
NSLog(@"name: %@, email: %@", new_user.name, new_user.email);
}
// Prints: name: John, email: joghn@domain.com
型チェックを行うなどの単純な型のNSString
場合、他の型にキャストしようとすると変換エラーが発生するため、デバッグでは非常に重要です。これは、ソースからのコードです。
RCTConvert.h
+ (NSString *)NSString:(id)json;
RCTConvert.m
/**
* This macro is used for creating converter functions for directly
* representable json values that require no conversion.
*/
#if RCT_DEBUG
#define RCT_JSON_CONVERTER(type) \
+(type *)type : (id)json \
{ \
if ([json isKindOfClass:[type class]]) { \
return json; \
} else if (json) { \
RCTLogConvertError(json, @ #type); \
} \
return nil; \
}
#else
#define RCT_JSON_CONVERTER(type) \
+(type *)type : (id)json \
{ \
return json; \
}
#endif
RCT_JSON_CONVERTER(NSArray)
RCT_JSON_CONVERTER(NSDictionary)
RCT_JSON_CONVERTER(NSString)
RCT_JSON_CONVERTER(NSNumber)
使用方法のサンプルについてRCTConvert
は、ソースを参照してください: https://github.com/facebook/react-native/blob/master/React/Base/RCTConvert.m