Using nil-coalescing operator with try? for function that throws and returns optional(将零合并运算符与Try一起使用?对于抛出并返回可选的函数)
本文介绍了将零合并运算符与Try一起使用?对于抛出并返回可选的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在以下两种情况下,我要使用nil-coalescing运算符设置默认值:
- 函数引发错误
- 函数返回nil
请查看下面的代码片段。我有以下问题:
- 为什么项目1为空?
- 项目1的初始化与项目2的初始化有什么不同
enum VendingMachineError: Error {
case invalidCode
}
class VendingMachine {
func itemCode(code: Int) throws -> String? {
guard code > 0 else {
throw VendingMachineError.invalidCode
}
if code == 1 {
return nil
} else {
return "Item #" + String(code)
}
}
}
let machine = VendingMachine()
// Question: Why is this nil?
let item1 = try? machine.itemCode(code: 0) ?? "Unknown"
print(item1)
// nil
// What is the difference between the initialization of item1 vs item2
let item2 = (try? machine.itemCode(code: 0)) ?? "Unknown"
print(item2)
// Unknown
推荐答案
本质上,这与try
运算符的语法有关。当与不带括号的二进制表达式一起使用时,try
applies to the whole binary expression,因此:
try? machine.itemCode(code: 0) ?? "Unknown"
与:
相同try? (machine.itemCode(code: 0) ?? "Unknown")
由于itemCode
引发错误,?? "Unknown
表达式的后半部分被忽略,try?
表达式的计算结果为空。
另一方面,第二个表达式如下所示:
(try? machine.itemCode(code: 0)) ?? "Unknown"
首先对try?
表达式求值(为零),然后应用??
,将整个表达式求值为"未知"。
这篇关于将零合并运算符与Try一起使用?对于抛出并返回可选的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:将零合并运算符与Try一起使用?对于抛出并返回可选的函数


基础教程推荐
猜你喜欢
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01