Swift实现网页每30秒自动刷新的问题求助
修复代码并实现网页自动刷新功能
你的代码存在几个关键问题,以下是修复后的版本,同时适配现代Swift语法:
import UIKit import WebKit class ViewController: UIViewController { // 声明WKWebView为类属性,让刷新逻辑可以访问 private var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() // 初始化WKWebView,替代已废弃的UIWebView webView = WKWebView(frame: CGRect(x: -79, y: -60, width: 2080, height: 1200)) view.addSubview(webView) // 安全处理URL和请求,避免强制解包崩溃 guard let url = URL(string: "你的网页URL") else { print("无效的URL") return } let request = URLRequest(url: url) webView.load(request) // 使用闭包形式的Timer,避免循环引用 Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { [weak self] _ in self?.webView.reload() } } }
关键修改说明:
- 替换废弃组件:用
WKWebView替代已废弃的UIWebView,需要导入WebKit框架 - 类属性声明:把webView从局部变量改为类属性,确保刷新逻辑能访问到它
- 移除冗余代码:删掉自定义的
CGRectMake,Swift中直接使用CGRect(x:y:width:height)初始化矩形 - 安全的URL处理:用
guard let替代强制解包,避免URL无效时崩溃 - 避免循环引用:Timer闭包中捕获
weak self,防止ViewController无法被释放 - 简化刷新逻辑:直接在Timer闭包里调用reload,省去单独的update方法(也可以保留update方法,只要保证能访问webView)
另外注意:
- 把代码中的
"你的网页URL"替换成实际要加载的网页地址 - 如果需要适配不同屏幕尺寸,建议使用AutoLayout替代固定frame,避免在不同设备上布局错乱
内容的提问来源于stack exchange,提问作者diddly101
相关产品推荐
相关产品推荐

