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

QT笔记——Q_PROPERTY了解

C#为listview选中的项添加右键菜单
开箱即用-使用异步加载布局来优化页面启动速度的几种方案

雷克萨斯,锁死的安全,挡不住的心寒

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

Failed to configure mysql, what's going on?
[email protected] This version of tar is no longer supported, and will not receive"/>npm WARN deprecated [email protected] This version of tar is no longer supported, and will not receive

sva 断言资料

FPGA手撕代码——CRC校验码的多种Verilog实现方式 (2021乐鑫科技数字IC提前批代码编程)

5G基础学习1、5G网络架构、网络接口及协议栈
随机推荐
4年手工测试被应届生取代了,用血与泪的教训给xdm一个忠告,该学自动化了...
8年软件测试工程师的感悟:与薪资相匹配的永远是实力
微信小程序---组件开发与使用
多大数量级会出现哈希碰撞
19、商品微服务-srv层实现
FinClip | 来了, 2022 年 7 月更新大盘点
数字化转型中的低代码
流动性质押挖矿系统开发如何制作?单双币系统开发成熟技术
10份重磅报告 — 展望中国数字经济未来
小几届的学弟问我,软件测试岗是选11k的华为还是20k的小公司,我直呼受不了,太凡尔赛了~
爆款视频怎么做?这里或许有答案!
通过方法引用获取方法名
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...
小程序插件的生态丰富,加速开发建设效率
The 38-year-old daughter is not in love and has no stable job, the old mother is crying
从幻核疑似裁撤看如何保证NFT的安全
ES2020-23简单易懂又实用的精选特性讲解 日常开发必备干货!
MP的几种查询方式
STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)
配置mysql失败了,这是怎么回事呢?