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

org.apache.ibatis.binding.BindingException Invalidbound statement (not found)的解决方案和造成原因分析(超详细)

细学常用类,集合类,IO流

npm WARN config global `--global`, `--local` are deprecated. Use `--location解决方案

C#/VB.NET to add more lines more columns image watermark into the Word document

5G网络切片技术

Outsourced Student Management System Architecture Documentation

MySql模糊查询大全

LeetCode每日一练 —— 225. 用队列实现栈

Oracle根据时间查询

Failed to configure mysql, what's going on?
随机推荐
微信小程序---组件开发与使用
JSP中include指令的功能简介说明
SQL 经典50题(题目+解答)(1)
QT笔记——Q_PROPERTY了解
软件测试岗位巨坑?阿里在职7年测试人告诉你千万别上当
LeetCode每日一练 —— 225. 用队列实现栈
sva 断言资料
从众多接口中脱颖而出的最稳定的接口——淘宝详情api
CAN总线的AUTOSAR网络管理
Mysql环境变量的配置(详细图解)
21 Days Learning Challenge - Day 1 Punch (Screen Density)
leetcode: 200. Number of islands
企业级数据治理工作怎么开展?Datahub这样做
【2022 小目标检测综述】Towards Large-Scale Small Object Detection: Survey and Benchmarks
sqli-labs(less-11)
一体化在线政务服务平台,小程序容器技术加速建设步伐
小程序插件的生态丰富,加速开发建设效率
突破边界,华为存储的破壁之旅
从零开始Blazor Server(5)--权限验证
MySQL模糊查询性能优化