我已经定义了一个自定义对象公开给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函数起作用吗?