![](/img/trans.png)
[英]Calling anonymous javascript function in swift using JSContext
[英]Why I can't get function reference by JSContext in Swift when using Arrow function
我正在嘗試在 Swift 中獲取 JavaScript function 參考並執行它。
最初,我在JS端使用箭頭function ,我的JavaScript function是這樣的。
const invokeCallback = (cbID, args) => {
// do some stuff
}
在 Swift 方面,我使用objectForKeyedSubscript
中的JSContent
來獲取上下文全局 object 中的屬性invokeCallback
。
context?.evaluateScript(jsCodeContent)
let invoke: JSValue? = context?.objectForKeyedSubscript("invokeCallback")
guard let invokeCallback = invoke else { return }
guard !invokeCallback.isUndefined else { return }
invokeCallback.call(withArguments: [cbId, args])
但我不能原來結果是undefined
。
Printing description of invoke:
▿ Optional<JSValue>
- some : undefined
然后,我嘗試使用這種語法來定義function
。
function invokeCallback(cbID, args) {
}
我現在可以在 Swift 端檢索 function
Printing description of invokeCallback:
function invokeCallback(cbID, args) {
// ....
}
有人知道為什么第一種情況不起作用,而第二種情況起作用嗎? 請把這些知識分享給我? 謝謝
參考:
問題不在於箭頭 function,而是您聲明 function 的方式。
在全局上下文中使用function 聲明聲明的函數成為全局 object 的一部分。
在全局上下文中用var
聲明的變量也成為全局 object 的一部分。 在這種情況下,您是否分配(箭頭)function 表達式或任何其他值都沒有關系。
在全局上下文中用const
聲明的變量不會成為全局 object 的一部分。
因為您的箭頭 function 被分配給使用const
聲明的變量,所以它不是全局 object 的一部分,因此您找不到它。 If you want your function to become part of the global object, you should either use a function declaration, declare your variable with var
, or assign it directly to the global object.
globalThis.invokeCallback = () => {...};
還值得注意的是,箭頭函數和常規 function 表達式( 不要與 function 聲明混淆) 並不總是可以互換的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.