我正在使用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
之间的区别是什么?
答案 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
}