当前位置:网站首页>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 可以和不可以相互替代的场景,小伙伴学会了吗?
感谢观赏,再会了!
边栏推荐
猜你喜欢

Shell编程之条件语句

3年测试在职,月薪还不足2w,最近被裁员,用亲身经历给大家提个醒...

Com多进程通信实现

ECCV22|PromptDet:无需手动标注,迈向开放词汇的目标检测
![ASP.NET Core 6框架揭秘实例演示[31]:路由&quot;高阶&quot;用法](/img/57/821576ac28abc8d1c0d65df6a72fa3.png)
ASP.NET Core 6框架揭秘实例演示[31]:路由&quot;高阶&quot;用法

配置mysql失败了,这是怎么回事呢?

当POC遇见RPA:RPA项目顺利实施的关键

bgp与mpls综合实验

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

npm WARN config global `--global`, `--local` are deprecated. Use `--location解决方案
随机推荐
QT笔记——Q_PROPERTY了解
腾讯云云函数SCF—入门须知
软件测试岗位巨坑?阿里在职7年测试人告诉你千万别上当
MP的几种查询方式
MySql模糊查询大全
Excel dynamic chart production
21天学习挑战赛--第一天打卡(屏幕密度)
19、商品微服务-srv层实现
LayaBox---TypeScript---Module Analysis
npm WARN config global `--global`, `--local` are deprecated. Use `--location解决方案
MapStruct
CAN总线的AUTOSAR网络管理
关于#oracle#的问题,如何解决?
Question about #oracle#, how to solve it?
小几届的学弟问我,软件测试岗是选11k的华为还是20k的小公司,我直呼受不了,太凡尔赛了~
QT笔记——QT类反射机制简单学习
Nanny Level Tutorial: Write Your Own Mobile Apps and Mini Programs (Part 2)
go语言的接口
bgp与mpls综合实验
保姆级教程:写出自己的移动应用和小程序(篇二)