当前位置:网站首页>Swift中什么时候不能用 () 代替 Void 来使用
Swift中什么时候不能用 () 代替 Void 来使用
2022-08-02 11:15:00 【大熊猫侯佩】
概述
这是一篇很短的文章。
我们知道,在Swift中 () 和 Void 在一些场合下是可以互为替代的,它们都表示“空”类型。注意该“空”类型和nil类型不是一回事,后者其实是Optional的一种,而前者表示“没有任何值”。
比如,我们可以这样写:
func test(_ handler: () -> Void){
handler()
}
也可以这样写:
func test(_ handler: () -> ()){
handler()
}
它们都表示handler闭包返回“空”值,即不返回任何值。
那么,在什么情况下不能用()表示Void呢?
一种场合是:当我们需要传递“空”类型本身,而不是“空”类型表示值的时候。
什么意思?
下面举个栗子
一个栗子
let start = Date.timeIntervalSinceReferenceDate
// 需要明确我们的任务组返回的类型为“空”类型本身,而不是“空”类型对应的值
await withThrowingTaskGroup(of: Void.self, body: {
for _ in 0 ..< 100 {
$0.addTask {
try await Task.sleep(nanoseconds: 1_000_000_000)
}
}
})
let end = Date.timeIntervalSinceReferenceDate
print(String(format: "Duration: %.2fs", end-start))
如上所示,异步函数withThrowingTaskGroup的第一个参数需要传递的是“空”类型本身,而不是它所对应的值,所以我们需要用 Void.self 而不是 Void 来填充。
但是,这里不可以使用() ,即:
await withThrowingTaskGroup(of: ().self, body: {
for _ in 0 ..< 100 {
$0.addTask {
try await Task.sleep(nanoseconds: 1_000_000_000)
}
}
})
这会导致编译失败:

总结
通过这个小栗子,我们学习了 () 和 Void 可以和不可以相互替代的场景,小伙伴学会了吗?
感谢观赏,再会了!
边栏推荐
- Nanny Level Tutorial: Write Your Own Mobile Apps and Mini Programs (Part 2)
- Deep Learning 100 Examples - Convolutional Neural Network (CNN) for mnist handwritten digit recognition
- leetcode: 200. Number of islands
- 腾讯云云函数SCF—入门须知
- games202:三,实时环境光照IBL + PRT
- Kotlin的协程与生命周期
- npm WARN deprecated [email protected] This version of tar is no longer supported, and will not receive
- LeetCode每日一练 —— 20. 有效的括号
- OSI 七层模型和TCP/IP模型及对应协议(详解)
- C#/VB.NET 添加多行多列图片水印到Word文档
猜你喜欢

Mysql事务隔离级别与MVCC(多版本并发控制)

记一次mysql查询慢的优化历程

After 21 years of graduation, I switched to software testing. From 0 income to a monthly salary of over 10,000, I am really lucky...

365天挑战LeetCode1000题——Day 047 设计循环队列 循环队列

SQL 经典50题(题目+解答)(1)

STM32+MPU6050 Design Portable Mini Desktop Clock (Automatically Adjust Time Display Direction)

多线程(基础) - 4万字总结

受邀出席Rust开发者大会|Rust如何助力量化高频交易?

4年手工测试被应届生取代了,用血与泪的教训给xdm一个忠告,该学自动化了...

10份重磅报告 — 展望中国数字经济未来
随机推荐
Kotlin的协程与生命周期
JSP中include指令的功能简介说明
MapStruct
jacoco的学习以及理解
多线程(基础) - 4万字总结
情景剧《重走长征路》上演
STM32+MPU6050 Design Portable Mini Desktop Clock (Automatically Adjust Time Display Direction)
yolo格式(txt)数据集转VOC(xml)
保姆级教程:写出自己的移动应用和小程序(篇二)
深度学习100例 —— 卷积神经网络(CNN)实现mnist手写数字识别
Shell编程之条件语句
Event object, do you know it well?
Three.JS程序化建模入门
QT笔记——在一个窗口上显示另外一个透明窗口
Oracle根据时间查询
SQL 经典50题(题目+解答)(1)
多大数量级会出现哈希碰撞
Outsourced Student Management System Architecture Documentation
注意力机制
npm WARN config global `--global`, `--local` are deprecated. Use `--location解决方案