在 Swift 中创建 JSStringRef
Create JSStringRef in Swift
我在 Swift 中使用新的(即 Objective-C)JavaScriptCore API。但是,JSContext 的 evaluateScript 方法不支持 JSEvaluateScript(来自 C API)支持的源 URL 和起始行号参数,因此我试图从 [=26] 调用 C 方法=]代码。
C 方法采用 JSStringRefs 而不是字符串,因此我需要创建它们。当我尝试明显的解决方案时:
println(JSStringCreateWithCFString("an example").takeRetainedValue())
我得到一个 EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)。 (我使用 takeRetainedValue()
因为文档指出 JSStringCreateWithCFString 遵循 Create Rule,但是 takeUnretainedValue()
给了我同样的错误)。我做错了什么?
这是 JavaScriptCore Swift header 中的错误。例如,现在正确的代码是:
import JavaScriptCore
let str = JSStringCreateWithCFString("an example")
let len = JSStringGetLength(str)
JSStringRelease(str)
我在 Swift 中使用新的(即 Objective-C)JavaScriptCore API。但是,JSContext 的 evaluateScript 方法不支持 JSEvaluateScript(来自 C API)支持的源 URL 和起始行号参数,因此我试图从 [=26] 调用 C 方法=]代码。
C 方法采用 JSStringRefs 而不是字符串,因此我需要创建它们。当我尝试明显的解决方案时:
println(JSStringCreateWithCFString("an example").takeRetainedValue())
我得到一个 EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)。 (我使用 takeRetainedValue()
因为文档指出 JSStringCreateWithCFString 遵循 Create Rule,但是 takeUnretainedValue()
给了我同样的错误)。我做错了什么?
这是 JavaScriptCore Swift header 中的错误。例如,现在正确的代码是:
import JavaScriptCore
let str = JSStringCreateWithCFString("an example")
let len = JSStringGetLength(str)
JSStringRelease(str)