oc 与 前端共舞

原生与前端是分别在两个山头,中间还隔着一条河,这两个山头上的人相互交流桥梁就是 JavaScriptCore

javaScriptCore,原本是WebKit中用来解释执行JavaScript代码的核心引擎,iOS7开发苹果开始讲JavaScriptCore 框架引入iOS系统,并将其作为系统级别的框架提供给开发者使用(JavaScriptCore.framework)。


image.png
image.png

通过JavaScripCore 在原生代码中调用JavaScript 变量的例子

这里中用toNumber 举例,当然toString 数组、字典 类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];
    //解析执行脚本
    [ct evaluateScript:@"function addition(x,y) {return x + y}"];
    JSValue *addition = ct[@"addition"];
    
    JSValue *resultValue = [addition callWithArguments:@[@(4),@(8)]];
    //将addtion 函数s执行的结果 转成原生的NSNumber 来使用。
    
   //如果你想在原生代码中使用JavaScript 中的函数对象,可以通过 callWithArgument 方法传入参数,然后实现它的调用
    JSVirtualMachine *jsvm = [[JSVirtualMachine alloc] init];
    JSContext *ct = [[JSContext alloc] initWithVirtualMachine:jsvm];
    //解析执行脚本
    [ct evaluateScript:@"function addition(x,y) {return x + y}"];
    JSValue *addition = ct[@"addition"];
    
    JSValue *resultValue = [addition callWithArguments:@[@(4),@(8)]];
    //将addtion 函数s执行的结果 转成原生的NSNumber 来使用。
    
    NSLog(@"funtion is %@; reslutValue is %@",addition,[resultValue toNumber]);

javaScirpt 调用 OC

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

//JSContext
    JSValue *subValue = [ct evaluateScript:@"subtration(4,8);"];
    NSLog(@"subValue(4,8) is %@",[subValue toNumber]);

你可能感兴趣的:(oc 与 前端共舞)