Skip to content
391. nshipster-Java​Script​Core episode artwork

EPISODE · Mar 9, 2016 · 9 MIN

391. nshipster-Java​Script​Core

from iOSDevLog · host iOSDevLog

http://nshipster.cn/javascriptcore/ ​​ ​JavaScriptCoreNate Cook撰写、 April Peng翻译、 发布于2015年1月19日 这个星期流行编程语言的最新排名结果是,Swift 迅速从第 68 位跃升到 22 位,而 Objective-C 仍然稳固的占据在第 10 位。但是,说到允许在 iOS 上运行的其他语言 上,这两个都被甩的很远:当前的冠军是 JavaScript。 OS X Mavericks 和 iOS 7 引入了 JavaScriptCore 库,它把 WebKit 的 JavaScript 引擎用 Objective-C 封装,提供了简单,快速以及安全的方式接入世界上最流行的语言。不管你爱它还是恨它,JavaScript 的普遍存在使得程序员、工具以及融合到 OS X 和 iOS 里这样超快的虚拟机中资源的使用都大幅增长。 这样一来,先抛开动态和类型安全的痛苦辩论,让我带你一起来做一个 JavaScriptCore 的观光。 JSContext / JSValue JSContext 是运行 JavaScript 代码的环境。一个 JSContext 是一个全局环境的实例,如果你写过一个在浏览器内运行的 JavaScript,JSContext 类似于 window。创建一个 JSContext 后,可以很容易地运行 JavaScript 代码来创建变量,做计算,甚至定义方法: SwiftObjective-C let context = JSContext() context.evaluateScript("var num = 5 + 5") context.evaluateScript("var names = ['Grace', 'Ada', 'Margaret']") context.evaluateScript("var triple = function(value) { return value * 3 }") let tripleNum: JSValue = context.evaluateScript("triple(num)") 代码的最后一行,任何出自 JSContext 的值都被包裹在一个 JSValue 对象中。像 JavaScript 这样的动态语言需要一个动态类型,所以 JSValue 包装了每一个可能的 JavaScript 值:字符串和数字;数组、对象和方法;甚至错误和特殊的 JavaScript 值诸如 null 和 undefined。 JSValue 包括一系列方法用于访问其可能的值以保证有正确的 Foundation 类型,包括: JavaScript TypeJSValue methodObjective-C TypeSwift TypestringtoStringNSStringString!booleantoBoolBOOLBoolnumbertoNumber toDouble toInt32 toUInt32NSNumber double int32_t uint32_tNSNumber! Double Int32 UInt32DatetoDateNSDateNSDate!ArraytoArrayNSArray[AnyObject]!ObjecttoDictionaryNSDictionary[NSObject : AnyObject]!ObjecttoObject toObjectOfClass:custom typecustom type 从上面的例子中得到 tripleNum 的值,只需使用适当的方法: SwiftObjective-C println("Tripled: \(tripleNum.toInt32())") // Tripled: 30 下标值 对 JSContext 和 JSValue 实例使用下标的方式我们可以很容易地访问我们之前创建的 context 的任何值。JSContext 需要一个字符串下标,而 JSValue 允许使用字符串或整数标来得到里面的对象和数组: SwiftObjective-C let names = context.objectForKeyedSubscript("names") let initialName = names.objectAtIndexedSubscript(0) println("The first name: \(initialName.toString())") // The first name: Grace Swift 展示了它的青涩,在这里,Objective-C 代码可以利用下标表示法,Swift 目前只公开原始方法来让下标成为可能:objectAtKeyedSubscript() 和 objectAtIndexedSubscript()。

Episode metadata supplied by the publisher feed · Published Mar 9, 2016

Embed this episode

Ready to play

391. nshipster-Java​Script​Core

0:00 9:08

No transcript for this episode yet

We transcribe on demand. Request one and we'll notify you when it's ready — usually under 10 minutes.

No similar episodes found.

No similar podcasts found.

Frequently Asked Questions

How long is this episode of iOSDevLog?

This episode is 9 minutes long.

When was this iOSDevLog episode published?

This episode was published on March 9, 2016.

Can I download this iOSDevLog episode?

Yes. Use the download control on the episode player to save the publisher-provided media file.
URL copied to clipboard!