react-native开发swift的ios应用,使用callback通信方式回调键值对组

 


当我们在开发react-native项目时,JS端与原生端的通信是很必要的。但是在iOS开发中我发现很难找到使用RCTResponseSenderBlock方式回调一组数据的方式,找了很多半天,终于找到一种方式,所以记录下来。

 

1、原生端的代码

 

@objc func getConfigData(_ callback: RCTResponseSenderBlock){
        let bunderManager:BundleManager? = BundleManager.getBundleManager()
        let appModel:AppModel = (bunderManager?.getAppModel())!
        let token:String = appModel.token!
        let serverUrl:String = appModel.url!
        let loginUrl:String = serverUrl.replacingOccurrences(of: "/mobileCloud/v1/bundle", with: "/oauth/oauth/authorize?response_type=token&state=&client_id=mobile")
        let appVetsionId:String = appModel.id!
        let homeDirectory:String = NSHomeDirectory()+"/Documents"
        //cllback回调键值对组
        callback([
                ["serverUrl":serverUrl,"token":token,"loginUrl":loginUrl,"appVetsionId":appVetsionId,"homeDirectory":homeDirectory]
            ])
    }

注:参数callback前面的下划线是为了接受JS端传过来的参数不用前缀,swift的方法参数在调用时正常时需要加上参数前缀的。如: 

bunderManager?.checkBundleConfigUpdate(callback: callback)

2、Object-c对JS端暴露方法

RCT_EXTERN_METHOD(getConfigData:(RCTResponseSenderBlock)callback)

这样,JS端就可以调用到这个方法了。

3、JS端代码

NativeModules.NativeManager.getConfigData((back) => {
       var REQUEST_URL = back.serverUrl + "/getData/"+back.appVetsionId;
        var token = back.token;
   });

JS端就通过这样拿到原生端的数据组了。

 

使用callback方式调用键值对组数据的方式就是这样。iOS开发中也可以使用promises的方式回调一个数组,但是这样JS端就必须使用async和await的方式调用,比较麻烦,当然也有优势。之后会再发文说明promises的调用方式。

使用过程中有问题的可以再私信我。

 

 

 

你可能感兴趣的:(React-native)