Swift: 反斜杠点“\.”是什么意思意思?

Swift: What does backslash dot "\." mean?

我是后端新手 Swift,我想我会使用 Vapor 快速启动和运行 一个副项目... 我 运行 vapor new WebServer --template=auth-template,现在我想弄清楚 return \.email 这样的东西是什么意思。 有关更多上下文,我正在查看 WebServer > Sources > App > Models > Users.swift:

import Authentication
import FluentSQLite
import Vapor

/// Allows users to be verified by basic / password auth middleware.
extension User: PasswordAuthenticatable {
    /// See `PasswordAuthenticatable`.
    static var usernameKey: WritableKeyPath<User, String> {
        return \.email
    }

// ...
}

这里是用户的定义 class:

/// A registered user, capable of owning todo items.
final class User: SQLiteModel {
    // {omit extra code} ...

    var email: String

    // {omit extra code} ...

    /// Creates a new `User`.
    init(id: Int? = nil, name: String, email: String, passwordHash: String) {
        // {omit extra code} ...
        self.email = email
        // {omit extra code} ...
    }
}

这个反斜杠点符号是什么意思?

tl;dr: 我们看一下 Swift 语言参考,果然,这种反斜杠点符号的用法被称为 key-path-expression.

(至此问题已经得到充分回答。)

关于如何获取那份隐藏文档的更实用的方法:

从您发布的代码中可以看出,用户 class 包含一个名为 emailproperty

请注意,假设您使用的是 Xcode,如果将 return \.email 替换为 return \,则会出现编译错误 "Expected expression path in Swift key path",因此这是一个暗示这个反斜杠点符号可能与称为密钥路径的东西有关。

从关于键路径的文档中,我们看到我们也可以编写 \User.email(您可以在 Xcode 中尝试它而不会出现编译器错误)。

了解该代码中发生的事情的更大背景:

因此,从语义上讲,要理解您正在查看的 usernameKey 声明的含义,我们可能需要了解什么是 WritableKeyPath。简单来说,从文档中,我们看到 WritableKeyPath 是:"A key path that supports reading from and writing to the resulting value."

所以,我们看到 usernameKey 声明接受了一个 WritableKeyPath 对象和 returns 一个 StringUser.email.

此外,显然用户 class 需要此 usernameKey 属性 以符合 PasswordAuthenticatable 协议,该协议在第一行导入import Authentication(如果您想在那里探索,请查看 Dependencies > Auth 2.0.0 > Authentication > Basic > BasicAuthenticatable.swift)。