如何处理失败的可选绑定
Posted
技术标签:
【中文标题】如何处理失败的可选绑定【英文标题】:How to handle failed Optional Binding 【发布时间】:2020-12-23 16:50:43 【问题描述】:我正在尝试从一个返回可选的字符串创建一个新的 URL 数据类型。当我尝试可选绑定时,缩进的代码永远不会被执行。
如何捕获错误或可选绑定失败的原因?
let newString = "http://somehost:1337/parse/classes/CompEntry?where=\"CompID\":\"__type\":\"Pointer\",\"className\":\"Competition\",\"objectId\":\"CXy40U65Z9\""
if let url = URL(string: newString)
print("here") // NEVER GETS EXECUTED
是不是因为字符串中转义了"字符?
【问题讨论】:
您的问题是关于“”还是关于“如何正确转义 URL 字符串”? 这不是创建 URL 的方法。使用 URL 组件。永远不要在真实代码中调用 URL(string:)! 感谢您的指点,@matt。尝试使用 queryItemToken 方法,但字符串中的转义字符仍然存在相同的问题。我需要为 Parse Platform 提供这种 JSON 格式 【参考方案1】:只需将 else 添加到 IF 控制流
let newString = "http://somehost:1337/parse/classes/CompEntry?where=\"CompID\":\"__type\":\"Pointer\",\"className\":\"Competition\",\"objectId\":\"CXy40U65Z9\""
if let url = URL(string: newString)
print("here") // NEVER GETS EXECUTED
else
print("here") // EXECUTED when optional binding fails
更新: 作者预计会出错
在无法解析给定字符串的情况下,URL 初始化程序不会引发错误
如果字符串不代表一个有效的,这个初始化器返回 nil 网址。例如,一个空字符串或一个包含以下字符的字符串 在 URL 中是非法的会产生 nil。 source
【讨论】:
是的,我添加了类似的代码来验证if let
语句是否失败。我只是不知道为什么或如何排除故障。似乎没有error
对象...
谢谢@Alexander-ReinstateMonica - 确实回答了。从 matt 回复原帖的评论来看,我也在调查 URLComponents【参考方案2】:
您可以从下面的字符串创建 url:
let newString = "http://somehost:1337/parse/classes/CompEntry"
if let url = URL(string: newString)
print("here")
然后创建一个 params 字典,如:
params = ["CompID": ["__type": "Pointer", "className": "Competition", "objectId": "CXy40U65Z9"]]
然后在 URLRequest 的 httpBody 中发送这些参数。
【讨论】:
以上是关于如何处理失败的可选绑定的主要内容,如果未能解决你的问题,请参考以下文章