使用Swift在React-Native中基于Promise的本机模块
我们已经知道并熟悉Javascript Promise❤但是,如果我们要构建本机模块并实现Promise,那又如何呢? 是的,您认为这很容易,您所需要的只是进入官方文档页面,并阅读“如何迅速编写承诺以响应本地需求”,对吗? 伙计,别那么容易,相信我spent我花了很多时间来创建正确的承诺,从Objective-C和Swift过渡到从桥梁过渡到React-Native。
好的,首先,您需要使用react-native init创建一个exampleApp 。
现在,转到exampleApp内的/ ios /文件夹,然后 打开exampleApp.xcodeproj
Xcode打开时,在集成目录中创建两个文件: ExamplePromise.m和ExamplePromise.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)->无效{
解决(真)
}
}
- 如何使用字符串数组将结构转换为NSData,反之亦然Swift
- UIRefreshController结束animation问题
- 如何使用交换机编写一个UITableView,如Alarm App iOS7?
- 从与索引path相关的互联网上的Xcode中获取错误
- 带两个NSFetchedResultsController实例的TableView
- 现在,testflight库和Xcode 5中没有任何更改说:“找不到-lTestFlight的ld:库”
- 如何检测AVPlayervideo何时结束播放?
- 在SceneKit iOS中使用平移手势旋转节点
- 使用Autolayout扩展tableView单元格导致UIViewAlertForUnsatisfiableConstraints