首页 > 解决方案 > 涉及 .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)
      }
    }

标签: swift

解决方案


这句话let note: Routeguide_RouteNote告诉斯威夫特,即将到来的等号的另一边将是一个Routeguide_RouteNote.

该类型符合SwiftProtobuf.Message.

因此,它有一个称为with返回的静态方法Self,即在这种情况下,是一个Routeguide_RouteNote实例。

因此,由于声明的类型,我们可以通过说.with而不是说来调用该方法Routeguide_RouteNote.with

注意这是由于 Swift 中一个高度专业化的规则,如果一个静态/类 funcMyType.myFunc返回一个 MyType 实例,那么如果编译器已经知道这一个 MyType,你可以在调用 func 时省略MyType,即你可以调用.myFunc()而不是MyType.myFunc().

这是完全相同的规则,允许您将视图设置为backgroundColor.red而不必说UIColor.red. 编译器知道这将是一个 UIColor,因此,更一般地查看规则,可以使用任何产生 UIColor 的 UIColor 静态/类成员,而无需UIColor明确说明。

.with函数接受一个函数参数,该参数在尾随闭包语法中表示为匿名函数,您就完成了。


推荐阅读