如何在 React Native RCT_EXPORT_VIEW_PROPERTY 宏中指定 "Array of Integers" 类型

How to specify "Array of Integers" type in React Native RCT_EXPORT_VIEW_PROPERTY macro

我想将整数数组从我的 JS RN 本机 UI 组件传递到我的 swift/objective-C 代码,该代码接受“[Int]”作为 属性。这是我用 RCT_EXPORT_VIEW_PROPERTY:

试过的
RCT_EXPORT_VIEW_PROPERTY(dataArray, [int])
RCT_EXPORT_VIEW_PROPERTY(dataArray, int *)
RCT_EXPORT_VIEW_PROPERTY(dataArray, Int *)

它们都被证明是无效类型,并且由于 typeSignature 中的 nil 值导致下面 RCTComponentData.m 代码中的 switch 语句出现 Xcode 异常:

    // Ordinary property handlers
    NSMethodSignature *typeSignature = [[RCTConvert class] methodSignatureForSelector:type];
    switch (typeSignature.methodReturnType[0]) {

我在任何地方都找不到有效类型的列表,我只能猜测。最好弄清楚我也可以与 RCT_EXPORT_VIEW_PROPERTY 一起使用的有效类型集是什么。

2015 年 11 月 12 日更新 - 找到了可行的解决方案,根据 Nick Lockwood 的建议我做了以下更改:

在RN_MyCustomerViewManager.m文件中(只要是导入Obj-c桥接头文件的Obj-C .m文件,你可以用任何名称命名这个文件)

RCT_EXPORT_VIEW_PROPERTY(dataArray, NSNumberArray)

在MyCustomerView.swift文件中

func setDataArray(dataArray: [Int]) {…}

func setDataArray(dataArray: [Int]?) {…}

现在传入整数数组。

我还发现有效的 RCT_EXPORT_VIEW_PROPERTY 类型在 React Native RCTConvert.h 中定义,所以如果您需要定义自己的 Native UI 组件

React Native 是一个 Objective-C 库,因此我们仅支持 Swift 类型的子集,这些类型可以桥接到 Objective-C.

swift 类型 [Int] 根本无法在 Objective-C 中表示。您可以获得的最接近的是 NSArray<NSNumber *> *,它与 [Int] 不直接兼容。要在 React Native 中导出 NSNumber 数组 属性,您可以使用

RCT_EXPORT_VIEW_PROPERTY(dataArray, NSNumberArray)

然而,您可能需要在 Swift 端做的是将类型更改为 [NSNumber]?[AnyObject]?(注意 ? 后缀,因为视图属性是在 React 中都可以为空),或者如果你不能这样做,导出第二个 属性 具有不同名称的类型 [AnyObject]? 然后在 setter 中导出 属性 , 将值映射到您的实际 [Int] 属性.