当前位置:网站首页>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 可以和不可以相互替代的场景,小伙伴学会了吗?
感谢观赏,再会了!
边栏推荐
猜你喜欢
从众多接口中脱颖而出的最稳定的接口——淘宝详情api
npm run serve启动报错npm ERR Missing script “serve“
sqli-labs(less-11)
STM32+MPU6050 Design Portable Mini Desktop Clock (Automatically Adjust Time Display Direction)
- [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
打破千篇一律,DIY属于自己独一无二的商城
MapStruct
ssm web page access database data error
Outsourced Student Management System Architecture Documentation
npm run dev 和 npm run serve区别
随机推荐
智能手表前景如何?
开箱即用-使用异步加载布局来优化页面启动速度的几种方案
博云入选Gartner中国DevOps代表厂商
外包学生管理系统架构文档
go语言的接口
ES2020-23简单易懂又实用的精选特性讲解 日常开发必备干货!
SQL 经典50题(题目+解答)(1)
AdguardHome如何配置设置?我的AdguardHome配置内容过滤器拦截列表
腾讯云云函数SCF—入门须知
Axure谷歌浏览器扩展程序下载及安装方法(免翻墙)
看我如何用多线程,帮助运营小姐姐解决数据校对系统变慢!
翁恺C语言程序设计网课笔记合集
Coroutines and Lifecycle in Kotlin
SQLAlchemy使用教程
yolo格式(txt)数据集转VOC(xml)
雷克萨斯,锁死的安全,挡不住的心寒
Camera Hal OEM模块 ---- cmr_snapshot.c
面积曲线AUC(area under curve)
JSP中如何正确的填写include指令中的file路径呢?
图形处理单元(GPU)的演进