oc 與 前端共舞

原生與前端是分別在兩個山頭,中間還隔著一條河,這兩個山頭上的人相互交流橋梁就是 JavaScriptCore

javaScriptCore,原本是WebKit中用來解釋執(zhí)行JavaScript代碼的核心引擎,iOS7開發(fā)蘋果開始講JavaScriptCore 框架引入iOS系統(tǒng),并將其作為系統(tǒng)級別的框架提供給開發(fā)者使用(JavaScriptCore.framework)。


image.png
image.png

通過JavaScripCore 在原生代碼中調(diào)用JavaScript 變量的例子

這里中用toNumber 舉例,當(dāng)然toString 數(shù)組、字典 類toObjectOfClass都可以

    JSVirtualMachine *jsvm = [[JSVirtualMachine alloc] init];
    JSContext *ct = [[JSContext alloc] initWithVirtualMachine:jsvm];
    [ct evaluateScript:@"var i = 4 * 8"];//返回的是JSValue 對象
    NSNumber *num = [ct[@"i"] toNumber];
    NSLog(@"var is %@",num);


JSVirtualMachine *jsvm = [[JSVirtualMachine alloc] init];
    JSContext *ct = [[JSContext alloc] initWithVirtualMachine:jsvm];
    //解析執(zhí)行腳本
    [ct evaluateScript:@"function addition(x,y) {return x + y}"];
    JSValue *addition = ct[@"addition"];
    
    JSValue *resultValue = [addition callWithArguments:@[@(4),@(8)]];
    //將addtion 函數(shù)s執(zhí)行的結(jié)果 轉(zhuǎn)成原生的NSNumber 來使用。
    
   //如果你想在原生代碼中使用JavaScript 中的函數(shù)對象,可以通過 callWithArgument 方法傳入?yún)?shù),然后實現(xiàn)它的調(diào)用
    JSVirtualMachine *jsvm = [[JSVirtualMachine alloc] init];
    JSContext *ct = [[JSContext alloc] initWithVirtualMachine:jsvm];
    //解析執(zhí)行腳本
    [ct evaluateScript:@"function addition(x,y) {return x + y}"];
    JSValue *addition = ct[@"addition"];
    
    JSValue *resultValue = [addition callWithArguments:@[@(4),@(8)]];
    //將addtion 函數(shù)s執(zhí)行的結(jié)果 轉(zhuǎn)成原生的NSNumber 來使用。
    
    NSLog(@"funtion is %@; reslutValue is %@",addition,[resultValue toNumber]);

javaScirpt 調(diào)用 OC

JSVirtualMachine *jsvm = [[JSVirtualMachine alloc] init];
    JSContext *ct = [[JSContext alloc] initWithVirtualMachine:jsvm];
    //在JSContext中使用原生Block 設(shè)置一減法 subtraction 函數(shù)
    ct[@"subtration"] = ^(int x, int y){
        return  x - y;
    };

//JSContext
    JSValue *subValue = [ct evaluateScript:@"subtration(4,8);"];
    NSLog(@"subValue(4,8) is %@",[subValue toNumber]);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容