JSC学习笔记:JavaScriptCore 初识
JSContext/JSValue
JSContext是运行JavaScript的上下文环境,是一个全局环境实例;类似于浏览器端的window对象,表示浏览器的窗口;在浏览器中,所有JavaScript全局对象、属性、方法均自动成为window对象的成员。创建一个JSContext后,可以很容易地运行JavaScript代码创建变量、方法,进行相应计算,Swift中使用方法如下:
let context = JSContext()
context.evaluateScript("var num = 12")
context.evaluateScript("var result = function(value) {return value * 3}")
let tripleNum: JSValue = context.evaluateScript("triple(num)")
print("Tripled: \(tripleNum.toInt32())")
任何出自JSContext的值都被包裹在一个JSValue对象中,不管是字符串、数字、数组、对象和方法等;JavaScript中的错误(null)和特殊值(undefined)也会包含在其中。
JSValue提供一系列方法用于转换JavaScript类型到Obejective-C和Swift。
使用下标值访问上下文context中的值
JSContext使用字符串作为下标,类似于JavaScript中的属性字典;JSValue允许使用字符串或者整数来得到里面的对象。
context.evaluateScript("var stringArray = ['first', 'second', 'third']")
let str = context.objectForKeyedSubscript("stringArray")
let firstStr = str.objectAtIndexedSubscript(0)
print("The first str : \(firstStr.toString())")
Swift调用JavaScript函数
通过context的 objectForKeyedSubscript方法获取JS中属性对应的方法,通过 callWithArguments方法实现方法的调用,注意参数是对象,传入参数数组对象。代码如下:
let jsFunction = context.objectForKeyedSubscript("result")
let addResult = jsFunction.callWithArguments([5])
print("Result :\(addResult.toInt32())")
捕获JS执行中的异常
JS执行环境JSContext中有个exceptionHandler属性,通过该属性对应的回调方法可以得到JS执行中的异常,代码如下:
context.exceptionHandler = {context, exception in
print("JS Error: \(exception)")
}
context.evaluateScript("function multiply(value1, value2) { return value1 * value2")
输出结果如下:
Tripled: 36
The first str : first
Result :15
JS Error: SyntaxError: Unexpected end of script
学习资料:http://nshipster.cn/javascriptcore/
JSC学习笔记:JavaScriptCore 初识的更多相关文章
- Storm学习笔记 - Storm初识
Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...
- LevelDB学习笔记 (1):初识LevelDB
LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...
- Java学习笔记心得——初识Java
初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...
- NuGet学习笔记1——初识NuGet及快速安装使用
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
- NuGet学习笔记(1) 初识NuGet及快速安装使用
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
- python学习笔记六 初识面向对象上(基础篇)
python面向对象 面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...
- NuGet学习笔记(1)——初识NuGet及快速安装使用
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
- NuGet学习笔记(1)——初识NuGet及快速安装使用(转)
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
- NuGet学习笔记(1) 初识NuGet及快速安装使用[转]
来自:http://www.cnblogs.com/lzrabbit/archive/2012/05/01/2477607.html 关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学 ...
随机推荐
- Spring MVC一个方法适用多种调用方式
web.xml spring-mvc.xml <mvc:annotation-driven /> <context:component-scan base-package=" ...
- jQuery Validate 插件验证,,返回不同信息(json remote)自定义
问题 申请账号需要确认该账号是存在 jquery.validate.js中的remote Jquery Ajax获取后台返回的Json数据后,添加自定义校验 解题思路:输入的登陆信息远程验证是否该账号 ...
- win8上安装 Pillow
1.确保正确安装pip(2.7.9默认安装) 2. pip install wheel 3.下载 pillow-*.whl 根据自己的电脑和python版本 地址 4.安装 pip install x ...
- Eddy's digital Roots(九余数定理)
Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- jquery跨域访问解决方案(转)
客户端“跨域访问”一直是一个头疼的问题,好在有jQuery帮忙,从jQuery-1.2以后跨域问题便迎刃而解.由于自己在项目中遇到跨域问题,借此机会对跨域问题来刨根问底,查阅了相关资料和自己的实践,算 ...
- Oracle EBS-SQL (INV-8):检查物料入库明细信息.sql
select a.vendor_number 供应商编码 ,a.vendor_name 供应商名称 ,a.item_nu ...
- 深入剖析MFC中对于Windows消息处理、运行机制
序: 本人对Windows系统.MFC谈不上有深入的了解,但对MFC本身包装API的机制很有兴趣,特别是读了候老师的<深入浅出MFC>后,感觉到VISUAL C++的Application ...
- MediaInfo使用简介(新版本支持HEVC)
MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件 (免费使用.免费获得源代码).他除了提供DLL之外,本身也提供GUI工具用于查看视频信息.我使用中发现,新版本的Media ...
- hdu 4686 Arc of Dream(矩阵快速幂乘法)
Problem Description An Arc of Dream is a curve defined by following function: where a0 = A0 ai = ai- ...
- linux使用FIO测试磁盘的iops
FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, ...