Swift:JavascriptCore覆盖自定义对象的toString

时间:2018-07-11 21:53:17

标签: ios swift javascriptcore

我已经定义了一个自定义对象公开给JSContext,但是toString方法似乎不起作用。我怀疑它与javascripts toString方法冲突,但这是已定义并附加到不应冲突的对象上。

@objc protocol MyObjectLinker: JSExport {
    func get() -> String
    func toString() -> String
}

class MyObject: NSObject, MyObjectLinker {
    let name: String        

    init(name: String) {
        self.name = name
    }

    func get() -> String {
        return name
    }

    func toString() -> String {
        return get().uppercased()
    }
}

在这里创建对象

let myFunc: @convention(block) (String) -> MyObject = { name in
    MyObject(name)
}

此处是调用代码的地方

let context = JSContext
context.setObject(unsafeBitCast(self.myFunc, to: AnyObject.self), forKeyedSubscript: "myFunc" as (NSCopying & NSObjectProtocol)?)
context.evalucateScript("function runme() { return myFunc("hello world").toString() }")
let function = context.objectForKeyedSubscript("runme")
let jsResult = function.call(withArguments: [])
let result = jsResult.toString() as String

执行最后一行时,如果toString方法内部有一个断点,则显然不会命中该函数。

有人知道要重写toString函数才能使我的自定义toString函数起作用吗?

0 个答案:

没有答案