我是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} ...
}
}
这个反斜线点符号是什么意思?
1条答案
按热度按时间icnyk63a1#
**tl;dr:**我们看一下Swift语言参考,可以肯定的是,这种反斜杠-点表示法的用法被称为key-path-expression。
(The到目前为止,问题已得到充分回答。)
关于如何获得那块被掩埋的文档的更实际的方法:
从您发布的代码中可以看到,User类包含一个名为
email
的property。请注意,假设您使用的是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)。