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

iyzzxitl  于 2023-03-28  发布在  Swift
关注(0)|答案(1)|浏览(193)

我是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
    }

// ...
}

下面是User类的定义:

/// 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} ...
    }
}

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

icnyk63a

icnyk63a1#

**tl;dr:**我们看一下Swift语言参考,可以肯定的是,这种反斜杠-点表示法的用法被称为key-path-expression。

(The到目前为止,问题已得到充分回答。)

关于如何获得那块被掩埋的文档的更实际的方法:

从您发布的代码中可以看到,User类包含一个名为emailproperty
请注意,假设您使用的是Xcode,如果您将return \.email替换为return \,则会得到编译错误"Expected expression path in Swift key path",因此这是一个提示,表明此反斜杠-点表示法可能与称为键路径的东西有关。
从key-path的文档中,我们可以看到我们也可以编写\User.email(你可以在Xcode中尝试它,没有编译器错误)。

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

因此,从语义上讲,要理解您正在查看的usernameKey声明的含义,我们可能需要了解WritableKeyPath是什么。简单地说,从文档中,我们可以看到WritableKeyPath是:“支持阅读和写入结果值的键路径。”
因此,我们看到usernameKey声明接受一个WritableKeyPath对象,并返回一个String,即User.email
此外,很明显User类需要这个usernameKey属性来符合PasswordAuthenticatable协议,该协议在第一行用import Authentication导入(如果您想了解那里,请查看Dependencies〉Auth 2.0.0〉Authentication〉Basic〉BasicAuthenticatable.swift)。

相关问题