4

私は反応するのが初めてで、反応ブリッジモジュールに取り組んでいます。RCTConvert がどのように便利で、どのように使用できるかを知りたいだけです。このサイトの リンクをたどっています

お願いします、誰か私がこのことについて知るのを手伝ってください。

4

1 に答える 1

3

ヘルパー関数はRCTConvertすべて、JSON 値を入力として受け入れ、それをネイティブの Objective-C 型またはクラスにマップします。NSStringNSNumber、などのサポートされている基本的な入力パラメータ タイプを、React ブリッジでサポートされていない 、 などのNSArrayNSDictionaryのタイプに変換すると便利です。例えば:NSURLUIColorCGRect

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

于 2021-06-10T11:07:36.790 に答える