国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

react-native調(diào)用ios native方法

Gemini / 2601人閱讀

摘要:是的縮寫,中相關(guān)的命名均以開頭。引入是用來定義被調(diào)用的方法的宏。的代碼實現(xiàn)它的作用是在定義的下面,定義一個可以被調(diào)用的方法。比如我們在中定義一個方法,該方法接收參數(shù)關(guān)閉這里使用直接把中的值轉(zhuǎn)換為在中的調(diào)用方法源代碼地址

React Native在設(shè)計之初,就考慮到了React Native提供的API,不能夠完全的覆蓋平臺對應(yīng)的所有API.因此在React Native中可以方便的調(diào)用Native的方法,Android上面對應(yīng)Java方法,IOS上對應(yīng)Object-C方法。
有的時候在處理數(shù)據(jù)庫,多線程上面,使用Native加的方便。
下面就以調(diào)用IOS系統(tǒng)的Alert為例,看下怎么使用JavaScript代碼調(diào)用Object-C的Native方法的。

RCTBridgeModule

RCT是ReaCT的縮寫,React Native中Object-C相關(guān)的命名均以RCT開頭。
RCTBridgeModule是定義好的protocol,實現(xiàn)該協(xié)議的類,會自動注冊到Object-C對應(yīng)的Bridge中。
Object-C Bridge上層負責(zé)與Object-C通信,下層負責(zé)和JavaScript Bridge通信,而JavaScript Bridge負責(zé)和JavaScript通信.
這樣,通過Object-C Bridge和JavaScript Bridge就可以實現(xiàn)JavaScript和Object-C的相互調(diào)用。
先要定義一個類:RNIOSAlert用來現(xiàn)實RCTBridgeModule協(xié)議。

#import 
#import 
#import "RCTBridgeModule.h"

@interface RNIOSAlert : NSObject

@end
RCT_EXPORT_MODULE

所有實現(xiàn)RCTBridgeModule的類都必須顯示的include宏命令:RCT_EXPORT_MODULE()
RCT_EXPORT_MODULE的作用是:自動注冊一個Module,當Object-c Bridge加載的時候。這個Module可以在JavaScript Bridge中調(diào)用。
RCT_EXPORT_MODULE宏命令的定義:

#define RCT_EXPORT_MODULE(js_name) 
RCT_EXTERN void RCTRegisterModule(Class); 
+ (NSString *)moduleName { return @#js_name; } 
+ (void)load { RCTRegisterModule(self); }

可以看到RCT_EXPORT_MODULE接受字符串作為其Module的名稱,如果不設(shè)置名稱的話默認就使用類名作為Modul的名稱。
引入RCT_EXPORT_MODULE:

#import "RNIOSAlert.h"

@implementation RNIOSAlert

RCT_EXPORT_MODULE();

@end
RCT_EXPORT_METHOD

RCT_EXPORT_METHOD是用來定義被JavaScript調(diào)用的方法的宏。RCT_EXTERN_METHOD調(diào)用了宏RCT_EXTERN_REMAP_METHOD,最終調(diào)用宏RCT_EXTERN_REMAP_METHOD
RCT_EXTERN_REMAP_METHOD的代碼實現(xiàn):

#define RCT_EXTERN_REMAP_METHOD(js_name, method) 
? + (NSArray *)RCT_CONCAT(__rct_export__, 
? ? RCT_CONCAT(js_name, RCT_CONCAT(__LINE__, __COUNTER__))) { 
? ? return @[@#js_name, @#method]; 
? }

它的作用是在RCT_EXPORT_MODULE定義的Module下面,定義一個可以被JavaScript調(diào)用的方法。
RCT_EXPORT_MODULE的使用,需要寫入方法名,參數(shù)以及完整的實現(xiàn),例如:

#import "RNIOSAlert.h"

@implementation RNIOSAlert

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(show:(NSString *)msg){

? UIAlertView * alertView=[[UIAlertView alloc] initWithTitle:@"react-native" message:msg delegate:nil cancelButtonTitle:@"關(guān)閉" otherButtonTitles:nil, nil];
? ? [alertView show];

}
@end
JavaScript調(diào)用

在JavaScript中調(diào)用Object-C定義的方法,需要先導(dǎo)入NativeModules,再使用RNIOSAlert
完整代碼如下:

import {? ?
? ? StyleSheet,
? ? Text,
? ? View,
? ? NativeModules,
? ? TouchableOpacity
} from "react-native";

var RNIOSAlert = NativeModules.RNIOSAlert;

class RNIos extends Component {
? ? render() {

? ? ? ? return (
? ? ? ? ? ? 
? ? ? ? ? ? ? ? RNIOSAlert.show("from react native ")}>
? ? ? ? ? ? ? ? ? ? Alert
? ? ? ? ? ? ? ? 
? ? ? ? ? ? 
? ? ? ? );
? ? }
}

成功調(diào)用Alert

參數(shù)

RCT_EXPORT_METHOD支持需要JSON所支持的數(shù)據(jù)類型,JavaScript中的參數(shù)與Object-C的參數(shù)的對應(yīng)關(guān)系。

string -> NSString

number -> (NSInteger,float,double,CGFloat,NSNumber)

boolean -> (BOOL,NSNumber)

array -> NSArray

object -> NSDictionary

function -> RCTResponseSenderBlock

另外React Navite還提供了RCTConvert,詳情的代碼可以參照 https://github.com/facebook/react-native/blob/master/React/Base/RCTConvert.h,他的作用可以把傳入的參數(shù)轉(zhuǎn)換為需要的數(shù)據(jù)類型。
比如我們在Object-C中定義一個方法,該方法接收NSDictionary參數(shù):

RCT_EXPORT_METHOD(showTime:(NSDictionary*)dict){
? NSDate * date =[RCTConvert NSDate:dict[@"time"]];
? UIAlertView * alertView=[[UIAlertView alloc] initWithTitle:@"react-native" message:[date description] delegate:nil cancelButtonTitle:@"關(guān)閉" otherButtonTitles:nil, nil];
? [alertView show]; ?
}

這里使用RCTConvert直接把NSDictionary中的值轉(zhuǎn)換為NSDate.
在JavaScript中的調(diào)用showTime方法:

......
 {
? ? ? ? ? ? ? ? ? ? var date = new Date();
? ? ? ? ? ? ? ? ? ? RNIOSAlert.showTime(
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? time: date.getTime()
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? }}>
? ? ? ? ? ? ? ? ? ? Time
? ? ? ? ? ? ? ? 
......

源代碼地址:https://github.com/jjz/react-...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91649.html

相關(guān)文章

  • React-native 使用原生(ios, android)第三方sdk

    摘要:但阿里百川并沒有提供直接獲取數(shù)據(jù)的方法,所以選擇時一定要慎重。 React-native 使用native第三方sdk ios(以阿里百川用戶反饋為例) 首先安裝cocopods(類似于npm,ios開發(fā)的依賴管理工具,教程:http://www.code4app.com/artic... 在ios根目錄下創(chuàng)建Podfile文件,添加如下代碼(使用的是百川feedback1.1.1版...

    qujian 評論0 收藏0
  • React-Native 真的是移動開發(fā)的未來嗎

    摘要:在版本上,安卓系統(tǒng)上的渲染就有鋸齒,后來我們不分效果是使用圖片實現(xiàn)的,汗啊第三方組件不全。搖一搖問題的解決在我們使用了等狀態(tài)管理時,熱更新不會更新這些代碼,而頻繁搖一搖實在是太累了。此時可以使用此時相當于虛擬了一個搖一搖事件。 公司本年度有App任務(wù),陸陸續(xù)續(xù)用RN開發(fā)了兩個應(yīng)用。一款是涉及儀器控制的平板項目,另一款是客戶端的App。下文談?wù)勈褂肦N開發(fā)的部分認知(其實只是隨便扯一扯,...

    thursday 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<