从 Apple TV TVML TVJS JavaScript 应用调用 Swift 代码
Call Swift code from an Apple TV TVML TVJS JavaScript App
我有一个基本的 TVML 应用程序设置。目前简单的事件(例如按下按钮)是通过 JavaScript (TVJS) 处理的。
当用户按下一个按钮(通过 TVML 模板提供)时,我希望在 Swift 中使用一些代码 运行 来操纵 UI 元素。
最好的方法是什么?
您可以在TVApplicationControllerDelegate中使用evaluateAppJavaScriptIn方法,如下所示,并在其中编写相应的swift方法; (swift 边)
// MARK: TVApplicationControllerDelegate
func appController(_ appController: TVApplicationController, evaluateAppJavaScriptIn jsContext: JSContext){
let debug : @convention(block) (String!) -> Void = {
(string : String!) -> Void in
#if DEBUG
print("[log]: \(string!)\n")
#endif
}
jsContext.setObject(unsafeBitCast(debug, to: AnyObject.self), forKeyedSubscript: "debug" as (NSCopying & NSObjectProtocol)!)
}
之后你可以像这样从TVJS调用这个方法; (js 端)
debug('Hello from js to swift...');
我有一个基本的 TVML 应用程序设置。目前简单的事件(例如按下按钮)是通过 JavaScript (TVJS) 处理的。
当用户按下一个按钮(通过 TVML 模板提供)时,我希望在 Swift 中使用一些代码 运行 来操纵 UI 元素。
最好的方法是什么?
您可以在TVApplicationControllerDelegate中使用evaluateAppJavaScriptIn方法,如下所示,并在其中编写相应的swift方法; (swift 边)
// MARK: TVApplicationControllerDelegate
func appController(_ appController: TVApplicationController, evaluateAppJavaScriptIn jsContext: JSContext){
let debug : @convention(block) (String!) -> Void = {
(string : String!) -> Void in
#if DEBUG
print("[log]: \(string!)\n")
#endif
}
jsContext.setObject(unsafeBitCast(debug, to: AnyObject.self), forKeyedSubscript: "debug" as (NSCopying & NSObjectProtocol)!)
}
之后你可以像这样从TVJS调用这个方法; (js 端)
debug('Hello from js to swift...');