gpt4 book ai didi

ios - 如何在 react 中使用 RCTConvert

转载 作者:行者123 更新时间:2023-12-04 13:04:25 24 4
gpt4 key购买 nike

我是 react 和 react 桥接模块的新手。我只想知道 RCTConvert 如何有用以及如何使用它。我正在关注这个网站
link

拜托,任何人都可以帮助我了解这些东西。

最佳答案

RCTConvert辅助函数都接受 JSON 值作为输入并将其映射到原生 Objective-C 类型或类。转换基本支持的输入参数类型很有用,例如 NSString , NSNumber , NSArray , NSDictionary其他:NSURL , UIColor , CGRect React 桥不支持等。例如:
Java脚本:

Module.setPosition({x : 10, y: 20});
对象:
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
也可以扩展 RCTConvertRCT_CUSTOM_CONVERTER自定义类型的宏:
Java脚本:
Module.addUser({name : 'John', email: 'joghn@domain.com'});
对象:
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

关于ios - 如何在 react 中使用 RCTConvert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39503929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com