Swift+Xcode开发WebView遇报错:Argument passed to call that takes no arguments
解决SwiftUI中WebView的"Argument passed to call that takes no arguments"错误
你的编译错误源于两处代码问题,直接修正即可解决:
错误根源
- 错误调用了UIView的方法:
UIView类本身不存在接收URLRequest参数的load方法,你需要调用的是WKWebView实例的load(_:)方法。 - 返回类型不明确:
makeUIView返回some UIView导致updateUIView中的uiView类型无法被推断为WKWebView,无法直接调用WebView专属方法。
修正步骤
1. 明确makeUIView的返回类型
将返回值从some UIView改为WKWebView,让Swift自动推断UIViewType为WKWebView:
func makeUIView(context: Context) -> WKWebView { return WKWebView() }
2. 正确调用WKWebView的加载方法
在updateUIView中,通过传入的uiView实例调用load(_:)方法,替代错误的UIView.load(request):
func updateUIView(_ uiView: WKWebView, context: Context) { let request = URLRequest(url: url) uiView.load(request) }
可选优化:避免强制解包崩溃
原代码中URL(string: urlstring)!的强制解包可能因无效URL导致崩溃,建议用可选绑定处理:
VStack(spacing: 40) { if let url = URL(string: urlstring) { WebView(url: url).frame(height: 500.0) .cornerRadius(10) } else { Text("无效的URL") } }
完整修正代码
// // ContentView.swift // GenuineApp // // Created by Kennysoft-Macbook on 11/10/22. // import SwiftUI import WebKit struct ContentView: View { @State private var showWebView = false private let urlstring: String = "https://www.genuineict.com" var body: some View { VStack(spacing: 40) { if let url = URL(string: urlstring) { WebView(url: url).frame(height: 500.0) .cornerRadius(10) } else { Text("无效的URL") } } } } struct WebView: UIViewRepresentable { var url:URL func makeUIView(context: Context) -> WKWebView { return WKWebView() } func updateUIView(_ uiView: WKWebView, context: Context) { let request = URLRequest(url: url) uiView.load(request) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
内容的提问来源于stack exchange,提问作者Engr Okunola Kehinde
相关产品推荐
相关产品推荐

