use*_*048 11 authentication swift vapor
我是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
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
这是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} ...
}
}
Run Code Online (Sandbox Code Playgroud)
这种反斜杠点符号是什么意思?
use*_*048 15
tl; dr:我们看一下Swift语言参考,果然,这种反斜杠点表示法的用法称为key-path-expression.
(到目前为止,这个问题得到了充分的回答.)
如何获取这些隐藏文档的更实际的方法:
从您发布的代码中可以看出,User类包含一个名为的属性email
.
请注意,假设您正在使用Xcode,如果替换return \.email
为return \
,则会出现编译错误"Expected expression path in Swift key path"
,因此这提示此反斜杠点符号可能与称为键路径的内容有关.
从关键路径上的文档中,我们看到我们也可以编写\User.email
(并且您可以在Xcode中尝试它而不会出现编译器错误).
了解该代码中正在发生的事件的更大背景:
因此,从语义上讲,要了解usernameKey
您正在查看的声明的含义,我们可能想要了解它WritableKeyPath
是什么.简单来说,从文档中我们看到a WritableKeyPath
是:"支持读取和写入结果值的关键路径."
所以,我们看到,该usernameKey
声明发生在一个WritableKeyPath
对象,并返回一个String
就是User.email
.
此外,显然User类需要此usernameKey
属性才能符合PasswordAuthenticatable
在第一行导入的协议import Authentication
(如果您需要在那里进行探索,请查看依赖项> Auth 2.0.0>身份验证>基本> BasicAuthenticatable.swift).
归档时间: |
|
查看次数: |
1340 次 |
最近记录: |