当前位置:网站首页>When not to use () instead of Void in Swift
When not to use () instead of Void in Swift
2022-08-02 11:19:00 【Giant panda Hou Pei】
概述
这是一篇很短的文章.
我们知道,在Swift中 () 和 Void can be used interchangeably in some cases,它们都表示“空”类型.注意该“空”类型和nilTypes are not the same thing,后者其实是Optional的一种,The former means“没有任何值”.
比如,我们可以这样写:
func test(_ handler: () -> Void){
handler()
}
也可以这样写:
func test(_ handler: () -> ()){
handler()
}
它们都表示handler闭包返回“空”值,即不返回任何值.
那么,在什么情况下不能用()表示Void呢?
One case is:when we need to pass“空”类型本身,而不是“空”Types represent value.
什么意思?
下面举个栗子
一个栗子
let start = Date.timeIntervalSinceReferenceDate
// It needs to be clear that the type returned by our task group is“空”类型本身,而不是“空”the value corresponding to the type
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))
如上所示,异步函数withThrowingTaskGroupThe first parameter that needs to be passed is“空”类型本身,rather than its corresponding value,所以我们需要用 Void.self 而不是 Void 来填充.
但是,这里不可以使用() ,即:
await withThrowingTaskGroup(of: ().self, body: {
for _ in 0 ..< 100 {
$0.addTask {
try await Task.sleep(nanoseconds: 1_000_000_000)
}
}
})
这会导致编译失败:
总结
via this little chestnut,我们学习了 () 和 Void Scenarios that can and cannot be replaced with each other,Did you guys learn??
感谢观赏,再会了!
边栏推荐
猜你喜欢
随机推荐
Kotlin的协程与生命周期
记录代码
5G网络切片技术
ansible module --yum module
外包学生管理系统架构文档
Failed to configure mysql, what's going on?
jacoco的学习以及理解
小几届的学弟问我,软件测试岗是选11k的华为还是20k的小公司,我直呼受不了,太凡尔赛了~
ssm web page access database data error
LayaBox---TypeScript---Mixins
小程序插件的生态丰富,加速开发建设效率
sva 断言资料
21天学习挑战赛--第一天打卡(屏幕密度)
有奖征集|TaoCloud&宝德联合举办全闪POC!
深度学习100例 —— 卷积神经网络(CNN)实现mnist手写数字识别
mysql清除binlog日志文件
ssm网页访问数据库数据报错
Excel dynamic chart production
一体化在线政务服务平台,小程序容器技术加速建设步伐
您应该知道的 Google Sheets 使用技巧