JSValue init(bool:in :) vs JSValueMakeBoolean()

时间:2016-09-26 20:03:59

标签: ios swift swift3 javascriptcore

我正在使用JavaScriptCore框架,并发现了两种在JavaScript上下文中创建布尔值的方法:

import JavaScriptCore

let context = JSContext()

let trueVal = JSValue(bool: true, in: context)
JSValueIsBoolean(context?.jsGlobalContextRef, trueVal?.jsValueRef) // true

let otherTrueValue = JSValueMakeBoolean(context?.jsGlobalContextRef, true)
JSValueIsBoolean(context?.jsGlobalContextRef, otherTrueValue) // true

JSValue(bool:in:)JSValueMakeBoolean之间的区别是什么?

1 个答案:

答案 0 :(得分:1)

JSValueRef生成的标头会保留此评论:

 * Copyright (C) 2006 Apple Inc.  All rights reserved.

对于JSValue

 * Copyright (C) 2013 Apple Inc. All rights reserved.

似乎JavaScriptCore框架最初是为基于C函数的API的旧OS X(在the reference page中显示10.5+)开发的。后来,iOS已经推出了基于现代类的API。

(尽管我从未在如此旧的OS X中使用过JavaScriptCore。)

我还没有在其中深入探索JavaScriptCore,因此我不确定在某些情况下是否还需要基于C函数的API。

但通常,您无需触摸C函数API。例如,您可以使用isBoolean属性而不是C函数JSValueIsBoolean

if let trueVal = JSValue(bool: true, in: context) {
    print(trueVal.isBoolean) //->true
}