swift - 涉及 .with 模式的 Swift 语法之谜
问题描述
试图分析以下 Swift 代码片段的语法。我不关心更大的语义,但如果你想要更多的上下文,你可以看这里。我对使用.with
其中一些我不熟悉的模式特别感兴趣。任何人都可以为我解析并分解它吗?
for (message, latitude, longitude) in noteContent {
let note: Routeguide_RouteNote = .with {
$0.message = message
$0.location = .with {
$0.latitude = Int32(latitude)
$0.longitude = Int32(longitude)
}
}
解决方案
这句话let note: Routeguide_RouteNote
告诉斯威夫特,即将到来的等号的另一边将是一个Routeguide_RouteNote
.
该类型符合SwiftProtobuf.Message
.
因此,它有一个称为with
返回的静态方法Self
,即在这种情况下,是一个Routeguide_RouteNote
实例。
因此,由于声明的类型,我们可以通过说.with
而不是说来调用该方法Routeguide_RouteNote.with
。
注意这是由于 Swift 中一个高度专业化的规则,如果一个静态/类 func
MyType.myFunc
返回一个 MyType 实例,那么如果编译器已经知道这是一个 MyType,你可以在调用 func 时省略MyType
,即你可以调用.myFunc()
而不是MyType.myFunc()
.这是完全相同的规则,允许您将视图设置为
backgroundColor
,.red
而不必说UIColor.red
. 编译器知道这将是一个 UIColor,因此,更一般地查看规则,可以使用任何产生 UIColor 的 UIColor 静态/类成员,而无需UIColor
明确说明。
该.with
函数接受一个函数参数,该参数在尾随闭包语法中表示为匿名函数,您就完成了。
推荐阅读
- cplex - 为什么我在使用 cvxpy 时会在 cp.installed_solvers() 中看到两个 cplex 求解器?
- angularjs - ctrl in undefined in angular 指令
- php - AWS RDS 和 PDO 不起作用 SQLSTATE[HY000] [2002]
- c# - 以度为单位的欧拉角的旋转矩阵
- actionscript-3 - 当我没有看到任何重复时如何修复重复的功能错误
- java - 如何在 Ubuntu 18.04 上安装最新的 openjdk 12
- django-celery - django-celery-backend 是否只在任务完成时保存记录?
- javascript - 10% 额外的表格计算器复选框 - 如何取消选中框和 10%
- google-cloud-platform - 谷歌云功能 - 错误:找不到模块 google-cloud/bigquery
- javascript - 重定向禁用滚动