ios - Swift:调用时导致崩溃的 URL 扩展
问题描述
URL
我为班级写了这个扩展
extension URL {
var appendAppParams: URL {
let extention_A: String = KeychainWrapper.standard.string(forKey: SOME_KEY) ?? ""
let extention_B: String = "SOME_VALUE"
//The crash happen in the next line of code
if self.absoluteString.contains("SOME_STRING") && !(self.absoluteString.contains(URL.KEY_1)) {
return self.appendItem(key: URL.KEY_1, value: SOME_STRING)
}
var url = self
if !url.absoluteString.contains(URL.KEY_1) {
url = url.appendItem(key: URL.KEY_1, value: SOME_VALUE)
}
if !url.absoluteString.contains(SOME_KEY){
url = url.appendItem(key:SOME_KEY, value: SOME_VALUE)
}
return url
}
}
appendItem
是URL
类的另一个扩展
extension URL {
func appendItem(key: String, value: String)-> URL {
var urlComponents = URLComponents(string: self.absoluteString)!
var queryItems = [URLQueryItem(name: key, value: value)]
if let originalParams = urlComponents.queryItems {
queryItems.append(contentsOf: originalParams)
}
urlComponents.queryItems = queryItems
return urlComponents.url!
}
}
extension URL {
static let KEY_1 = "SOME_VALUE"
}
崩溃打印到控制台:
*** NSForwarding: warning: object 0x106922cc8 of class 'Swift._SwiftObject' does not implement methodSignatureForSelector: -- trouble ahead
Unrecognized selector +[Swift._SwiftObject absoluteString]
2020-12-18 17:42:55.220568+0200 APP_NAME Unrecognized selector +[Swift._SwiftObject absoluteString]
我如何呼叫分机?
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
let webURLString = webView.url?.absoluteString ?? ""
if (!(webURLString.contains(URL.KEY_1))){
decisionHandler(.cancel)
redirectTo(urlStr: webURLString)
return
}
}
func redirectTo(urlStr: String){
if let url = URL(string: urlStr) {
var request = URLRequest(url: url)
let urlWithAppParams = url.appendAppParams
request = URLRequest(url: urlWithAppParams)
self.webView.load(request)
}
}
解决方案
推荐阅读
- python - 在 vlc.py 中设置 Vlc 窗口尺寸
- python - 在不同的 CPU 中运行不同的 Python 函数
- excel - 复制大于零的单元格,并将值粘贴到同一单元格中
- amp-html - 如何避免 AMP 网站上的重复代码?
- python - 抓取多个网页,结果输出乱序
- c - 基于计数排序的问题中的 SIGSEGV 错误
- xcode - 自定义字体未显示在我的开发窗格中
- python - tcp server 结合 Python3.7 asyncio 和 multiprocess
- amazon-web-services - 安全组和网络接口出现 AWS CloudFormation 错误,参数组合无效
- sql-server - 结合表数据和历史表