Ios 格式化URLComponents queryItems字符串时遇到问题
我正在从url参数获取代码,并尝试将其存储在变量中,以便在其他地方使用该代码Ios 格式化URLComponents queryItems字符串时遇到问题,ios,swift,Ios,Swift,我正在从url参数获取代码,并尝试将其存储在变量中,以便在其他地方使用该代码 var codeParam: URLQueryItem? override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if let key = change?[NSKe
var codeParam: URLQueryItem?
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if let key = change?[NSKeyValueChangeKey.newKey] {
print("URL \(key)")
let components = URLComponents(url: key as! URL, resolvingAgainstBaseURL: false)
print("COMPONETS \(String(describing: components?.queryItems))")
if let queryItems = components?.queryItems {
codeParam = queryItems.first { $0.name == "code" }
}
print(codeParam?.value!)
}
当前代码打印出来
可选(“jcnribc2espoy40rm6mep2pucly4h”)
但我只需要打印
jcnribc2espoy40rm6mep2pucly4h
我会使用以下内容:
扩展URL{
var代码项:字符串{
let components=URLComponents(url:self,resolvingAgainstBaseURL:false)
返回组件?.queryItems?.first(其中:{$0.name==“code”})?.value??“
}
}
它首先检查URL是否有效。
然后检查是否有任何查询项。
然后检查是否有名为“code”的查询项。
如果所有检查都成功,则返回值,否则返回空字符串
像这样使用它myURL.code项目
如果要保留现有的代码,只需执行以下操作:
打印(codeParam?.value??)
我会使用类似的方法:
扩展URL{
var代码项:字符串{
let components=URLComponents(url:self,resolvingAgainstBaseURL:false)
返回组件?.queryItems?.first(其中:{$0.name==“code”})?.value??“
}
}
它首先检查URL是否有效。
然后检查是否有任何查询项。
然后检查是否有名为“code”的查询项。
如果所有检查都成功,则返回值,否则返回空字符串
像这样使用它myURL.code项目
如果要保留现有的代码,只需执行以下操作:
打印(codeParam?.value??)
我找到了一个很好的方法,可以安全地打开它
guard let param = codeParam else { return }
guard let value = param.value else { return }
print(value)
我找到了一个很好的方法,把它拆开
guard let param = codeParam else { return }
guard let value = param.value else { return }
print(value)
你必须从可选的(codeParam,value)中解包值。你必须从可选的(codeParam,value)中解包值。我基本上已经这样做了,但不是在扩展中,我仍然在它中得到可选的(“”)。不,你没有。如果你像我那样做,你就不会有选择了。我更新了我的答案。我基本上已经这样做了,但不是在一个扩展中,我仍然得到可选(“”)在它不,你不是。如果你像我那样做,你就不会有选择了。我更新了我的答案。
guard let value=codeParam?.value-else{return}
guard let value=codeParam?.value-else{return}