如何在 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]
属性.
我想将整数数组从我的 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]
属性.