私はバックエンドの初心者Swiftであり、Vaporを使用してサイドプロジェクトをすばやく実行できると思っていました... vapor new WebServer --template=auth-template
を実行しました。 m 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
という名前の 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
であることがわかります。
さらに、import Authentication
を使用して最初の行にインポートされたusernameKey
プロトコルに準拠するために、UserクラスがこのPasswordAuthenticatable
プロパティを必要とすることは明らかです(探索する場合)そこで、[依存関係]> [Auth 2.0.0]> [認証]> [基本]> [BasicAuthenticatable.Swift]を確認します。