swift - 扩展类中的字段 null
问题描述
我创建了一个 WKWebView 来使用我的应用程序,我需要 Swift 与 Javascript 对话,除此之外一切正常!
import UIKit
import WebKit
class FirstViewController: UIViewController {
var wk: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let config = WKWebViewConfiguration()
let user = WKUserContentController()
user.add(self, name: "jsHandler")
config.userContentController = user
let wk = WKWebView(frame: .zero, configuration: config)
view.addSubview(wk)
}
}
extension FirstViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "jsHandler" {
// HERE HAPPENS THE ERROR
self.wk.evaluateJavaScript("chamaLista( '\(value!)' );", completionHandler: { (Any, Error) in })
}
}
}
我在 didReceive 函数中添加下一个代码:
extension FirstViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "jsHandler" {
if self.wk == nil {
print("WK is Null!")
}
}
}
}
不能在扩展类中引用对象???
解决方案
您永远不会将 webview 分配给wk
您的viewDidLoad
:
override func viewDidLoad() {
...
let wk = WKWebView(frame: .zero, configuration: config)
// assign the local variable to instance property
self.wk = wk
view.addSubview(wk)
}
要不就:
override func viewDidLoad() {
...
// assign directly to instance property, don't use local variable
wk = WKWebView(frame: .zero, configuration: config)
view.addSubview(wk)
}
推荐阅读
- c++ - 整数到 C++ 中的模板类型集合
- python - Python - 比较一个数字和一个数字列表的相似度
- php - 阻止 imap_expunge 删除未读消息
- sql - 如何抓取标记值周围的行?
- integration - 版本一与 HPALM 集成时如何处理用户故事拆分?
- python - pygame 无法重新定位图像
- android - 替代android滚动视图?
- javascript - 我在javascript中有一个不会按日期排序的对象数组
- python - uint8 小端数组到 uint16 大端
- python - 使用 jinja2/django 在 for 循环中加载图像