如何在 react-native 中委托第三方组件 ios

How to delegate third-party components in react-native ios

我在 android 中有以下 React 本机组件。
parent class 包含一些常用设置, 和一些模板代码(例如 setData)。

android版本

父组件

public abstract class ParentComponent<T extends Chart, U extends Entry> extends SimpleViewManager {
    @ReactProp(name = "commonSettings")
    public void setCommonSettings(T chart, ReadableMap propMap) {
        // do common settings
    }

    abstract U createEntry(ReadableMap value);

    @ReactProp(name = "data")
    public void setData(Chart chart, ReadableArray values) {
        for (int i = 0; i < values(); i++) {
            chart.addEntry(values.getMap(i));
        }
    }
}

子组件 A

public class FooComponent extends ParentComponent<FooChart, FooEntry> {
    @Override
    public String getName() {
        return "FooChart";
   }

    @Override
    protected View createViewInstance(ThemedReactContext reactContext) {
        return new FooChart(reactContext);
    }

    @ReactProp(name = "fooSettings")
    public void setFooSettings(FooChart chart, ReadableMap propMap) {
        // do foo settings
    }

    @Override
    FooEntry createEntry(ReadableMap value) {
        return xxxxx;
    }   
}

子组件 B

public class BarComponent extends ParentComponent<BarChart, BarEntry> {
    @Override
    public String getName() {
        return "BarChart";
   }

    @Override
    protected View createViewInstance(ThemedReactContext reactContext) {
        return new BarChart(reactContext);
    }

    @ReactProp(name = "barSettings")
    public void setBarSettings(FooChart chart, ReadableMap propMap) {
        // do foo settings
    }

    @Override
    BarEntry createEntry(ReadableMap value) {
        return xxxxx;
    }   
}

但是我应该如何在 ios 中实现这些?

我对 oc 和 swift 开发还很陌生,这是我的疑惑。

我试图定义 class ParentComponentManagerSwift: RCTViewManager,
并在那里声明 RCT_EXPORT_VIEW_PROPERTY(commonSettings, NSDictionary)
class FooComponentManagerSwift: ParentComponentManager,但它不起作用。
但是我们的组件确实继承了一堆导出,比如在 RCTViewManager 中声明的 backgroundColor/width/height?

1)如果FooChart & BarChart是UIView的子类,那么可以直接初始化FooChart & BarChart,设置delegate和return

- (UIView *)view {
  FooChart *chart = [FooChart new];
  chart.delegate = self;
  return chart;
}

2) 您可以使用继承共享常用设置和模板代码

3) 您可以复制导出或创建一些宏来合并通用导出。

组件实际上不继承导出。所有组件都有 RCTViewManager 导出 + 自己的导出,但它是在不使用继承的情况下完成的。