如何在 React Native RCT_EXPORT_VIEW_PROPERTY 宏中指定“整数数组”类型
Posted
技术标签:
【中文标题】如何在 React Native RCT_EXPORT_VIEW_PROPERTY 宏中指定“整数数组”类型【英文标题】:How to specify "Array of Integers" type in React Native RCT_EXPORT_VIEW_PROPERTY macro 【发布时间】:2016-02-12 06:40:22 【问题描述】:我想将一个整数数组从我的 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 组件,请将该文件放在手边
【问题讨论】:
请注意,您还可以通过使用类别扩展 RCTConvert 来定义新的支持类型。然而,这些类型也需要与 Objective-C 兼容。 【参考方案1】:React Native 是一个 Objective-C 库,因此我们只支持可以桥接到 Objective-C 的 Swift 类型子集。
swift 类型[Int]
根本无法在Objective-C 中表示。你能得到的最接近的是NSArray<NSNumber *> *
,它与[Int]
不直接兼容。要在 React Native 中导出 NSNumber 数组属性,您可以使用
RCT_EXPORT_VIEW_PROPERTY(dataArray, NSNumberArray)
但是,您可能需要在 Swift 方面将类型更改为 [NSNumber]?
或 [AnyObject]?
(注意 ? 后缀,因为视图属性在 React 中都是可以为空的),或者如果可以不要那样做,导出另一个名称为[AnyObject]?
类型的第二个属性,然后在该属性的设置器中,将值映射到您的实际[Int]
属性。
【讨论】:
以上是关于如何在 React Native RCT_EXPORT_VIEW_PROPERTY 宏中指定“整数数组”类型的主要内容,如果未能解决你的问题,请参考以下文章
如何在 React Native 中使用 React Native Video 显示多个视频? [关闭]