如何使用本机Swift代码对本机RCNAsyncStorage模块做出反应

时间:2019-05-13 12:23:58

标签: ios objective-c swift react-native

我有一个React Native应用,其中我使用RNCAsyncStorage npm模块来实现简单的数据持久化。但是,我的iOS版应用附带了一个共享扩展名,该共享扩展名需要访问我存储的数据字符串之一。

因此,简而言之,我想使用快速本机代码中的RNCAynscStorage来获取从我的React本机代码中存储的数据。

在尝试实现模块之前,我问了RNC,他们回答:

  

这是可能的,但需要一些本机模块的知识   工作一般。我不确定这与未来有多大关系   React Native即将进行的重构工作,但这就是您的方式   今天可以访问它:

// First, get the RNCAsyncStorage instance from the bridge
RNCAsyncStorage *asyncStorage = [bridge moduleForClass:[RNCAsyncStorage class]];

// Then call the getter:
[asyncStorage multiGet:@[@"count"]] callback:^(NSArray *response){
    NSObject *count = response[0];
    if ([count isKindOfClass:[NSError class]]) {
        // Failed to get count
        return;
    }

    // Use count here
}];

但是,我的扩展程序是用swift编写的,我不确定将其转换为swift后的外观。

首先,我遵循了一个指南,以快速的代码来访问react bridge模块,这就是我的想法: enter image description here

我还尝试将目标C示例转换为seift,但是您无法看到这是行得通的。 enter image description here 我不确定这是因为模块未正确公开/导入,还是仅仅是快速转换错误而已。但bridgeRNCAsyncStorage均未解决。

1 个答案:

答案 0 :(得分:1)

据我了解,您想以扩展名(今天或共享)访问AsyncStorage

我正在考虑您的扩展代码很快。

步骤1: 首先,您需要在扩展本身而不是在主项目中创建一个桥接头。

步骤2: 在“使用库的链接二进制文件”中的“共享扩展目标”中声明要访问的所有库(在构建阶段),尤其是(libRNCAsyncStorage.a)

步骤3: 在网桥头文件(.h)中,您必须导入RNCAsyncStorage.h

步骤4:现在,在扩展程序中的任何位置访问AsyncStore。