swift - 斯威夫特:反斜杠点“\”是什么意思?意思是?
问题描述
我是后端 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} ...
}
}
这个反斜杠点符号是什么意思?
解决方案
tl;dr:我们看一下 Swift 语言参考,果然,这种反斜杠点符号的用法称为key-path-expression。
(到此为止,这个问题已经得到了充分的回答。)
关于如何获取该隐藏文档的更实际的方法:
从您发布的代码中可以看出, User 类包含一个名为的属性email
。
请注意,假设您使用的是 Xcode,如果您替换return \.email
为return \
,您会得到 compile-error "Expected expression path in Swift key path"
,因此这暗示了这种反斜杠点符号可能与称为键路径的东西有关。
从关于 key-path 的文档中,我们看到我们也可以编写\User.email
(并且您可以在 Xcode 中尝试它而不会出现编译器错误)。
了解该代码中发生的事情的更大背景:
因此,从语义上讲,要了解usernameKey
您正在查看的声明的含义,我们可能想了解 aWritableKeyPath
是什么。简单来说,从文档中,我们看到 aWritableKeyPath
是:“支持读取和写入结果值的关键路径”。
因此,我们看到usernameKey
声明接受了一个WritableKeyPath
对象并返回一个String
that is User.email
。
此外,很明显 User 类需要此usernameKey
属性以符合PasswordAuthenticatable
在第一行导入的协议import Authentication
(如果您想在那里探索,请查看 Dependencies > Auth 2.0.0 > Authentication > Basic > BasicAuthenticatable.swift)。
推荐阅读
- r - 将 Woff 字体导入 R
- python - 如何使用 Python api 调用检索 GA4 中的事件标签和事件值参数?
- forms - Symfony 表单选择类型值 ConstraintViolation 映射为 false
- reactjs - React.js 上传文件到服务器
- html - 具有相同 URL 的多个视频不适用于海报属性
- r - 快速合并两个data.tables - 并行化或data.table
- java - 使用 Java 8 流处理 null 或空集合
- python - UnicodeDecodeError:“utf-8”编解码器无法解码位置 93 中的字节 0xd5:无效的继续字节
- paypal - Web平台的支付sdk推荐
- python - 如何检查字典中的每个键是否都是整数?