Swift:反斜杠“ \”的作用是什么 意思?

问题描述

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

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

从发布的代码中可以看到,User类包含一个名为的属性email

请注意,假设您使用的是Xcode,如果将其替换return \.emailreturn \,则会出现compile-error"Expected expression path in Swift key path",因此这表明该反斜杠点表示法可能与称为关键路径的东西有关。

从关于key-path的文档中,我们看到我们也可以编写\User.email(并且您可以在Xcode中尝试它,而没有编译器错误)。

因此,从语义上讲,要了解usernameKey您正在查看的声明的含义,我们可能想了解aWritableKeyPath是什么。简而言之,从文档中,我们看到a WritableKeyPath是:“支持对结果值进行读写的键路径。”

因此,我们看到该usernameKey声明接受一个WritableKeyPath对象并返回一个Stringis User.email

此外,很明显,User类需要此usernameKey属性才能与PasswordAuthenticatable协议兼容,该协议是在第一行中导入的import Authentication(如果您愿意在此处进行探索,请查看Dependencies> Auth 2.0.0> Authentication> Basic> BasicAuthenticatable.swift)。

解决方法

我是后端Swift的新手,并且以为我会使用Vapor来快速在边项目上启动和运行…我运行了vapor new WebServer --template=auth-template,现在我试图弄清楚类似的return \.email意思。有关更多上下文,我在WebServer>源>应用程序>模型> 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} ...
    }
}

这个反斜杠点表示什么意思?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...