Как использовать RCTConvert в реакции
Я новичок в реагировании и работаю над реагирующими мостовыми модулями. Я просто хочу знать, насколько полезен RCTConvert и как его использовать. Я перехожу по этой ссылке на сайт
Пожалуйста, кто-нибудь поможет мне узнать об этом материале.
1 ответ
Все вспомогательные функции принимают значение JSON в качестве входных данных и сопоставляют его с собственным типом или классом Objective-C. Полезно преобразовать основные поддерживаемые типы входных параметров, такие как,
NSNumber
,
NSArray
,
NSDictionary
другим:
NSURL
,
UIColor
,
CGRect
и т.д., которые не поддерживаются мостом React. Например:
Сценарий Java:
Module.setPosition({x : 10, y: 20});
ObjC:
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
Также возможно расширение с помощью
RCT_CUSTOM_CONVERTER
макрос для ваших пользовательских типов:
Сценарий Java:
Module.addUser({name : 'John', email: 'joghn@domain.com'});
ObjC:
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