使用Swift在React-Native中基于Promise的本机模块

我们已经知道并熟悉Javascript Promise❤但是,如果我们要构建本机模块并实现Promise,那又如何呢? 是的,您认为这很容易,您所需要的只是进入官方文档页面,并阅读“如何迅速编写承诺以响应本地需求”,对吗? 伙计,别那么容易,相信我spent我花了很多时间来创建正确的承诺,从Objective-C和Swift过渡到从桥梁过渡到React-Native。

好的,首先,您需要使用react-native init创建一个exampleApp

现在,转到exampleApp内的/ ios /文件夹,然后 打开exampleApp.xcodeproj

Xcode打开时,在集成目录中创建两个文件: ExamplePromise.mExamplePromise.swift,当您创建swift文件时,Xcode将要求创建桥文件,单击“是”以使用以下名称创建它: ExamplePromise-Bridging-Header.h

这是我们的魔术方法RCT_EXTERN_MODULE和RCT_EXTERN_METHOD:(RCT表示ReaCT)

  // ExamplePromise.m 
  #import  
  @interface RCT_EXTERN_MODULE(ExamplePromise,NSObject) 
  RCT_EXTERN_METHOD(getMyPromise: 
(RCTPromiseResolveBlock)解决
拒绝者:(RCTPromiseRejectBlock)拒绝
  @结束 

我们的快速文件:

  // ExamplePromise.swift 
 进口基金会 
  @objc(ExamplePromise) 
 类ExamplePromise:NSObject { 
  @objc(getMyPromise:拒绝者:) 
func getMyPromise(_ resolve:RCTPromiseResolveBlock,拒绝者拒绝:RCTPromiseRejectBlock)->无效{
解决(真)
}
  } 

和ExamplePromise-Bridging-Header.h

  #import  

现在,打开您的App.js文件并登录到控制台,例如:

 从'react-native'导入{NativeModules}; 
  ... 
 导出默认类App扩展Component  { 
...
  componentDidMount(){ 
让myModule = NativeModules.ExamplePromise;
console.log(myModule.getMyPromise)//这是我们的承诺
}
  ... 
}

就这样。 “很简单,当您知道如何做时”(我不记得那句话的作者:D)

因此,还有一件事,如果您想将一些参数从javascript传递到swift,则需要在.m和.swift文件中添加其他参数

  // ExamplePromise.m 
  RCT_EXTERN_METHOD(getMyPromise: (BOOL)值 
解析器: (RCTPromiseResolveBlock)
拒绝者:(RCTPromiseRejectBlock)拒绝
  ... 
  // ExamplePromise.swift 
  @objc(getMyPromise: 解析器:拒绝器:) 
func getMyPromise(_ someValue :布尔,
解析器解析:RCTPromiseResolveBlock,
拒绝者拒绝:RCTPromiseRejectBlock)->无效{
解决(真)
}
}