如何处理失败的可选绑定

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 中发送这些参数。

【讨论】:

以上是关于如何处理失败的可选绑定的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Play 框架中的可选查询参数

Play 2.2 JSON Reads with combinators:如何处理嵌套的可选对象?

Swift之深入解析如何处理非可选的可选项类型

WPF 如何处理对空对象属性的绑定?

如何处理视图模型属性的绑定内部数据?

如何处理绑定:更改 observableArray 中的数据后的 foreach