首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不能在下面的示例中使用结构的常量属性

为什么不能在下面的示例中使用结构的常量属性
EN

Stack Overflow用户
提问于 2019-08-01 08:24:24
回答 1查看 113关注 0票数 1

我从Swift设计模式书中获得以下代码:

代码语言:javascript
复制
protocol Identifiable {
    associatedtype ID
    static var idKey: WritableKeyPath<Self, ID> { get }
}

struct Book: Identifiable {
    static let idKey = \Book.isbn
    var isbn: String
    var title: String
}

效果很好。但是,如果我对Book属性使用let而不是var来更改isbn声明,则会收到一个错误:Type 'Book' does not conform to protocol 'Identifiable'。因此,整个错误代码看起来如下:

代码语言:javascript
复制
protocol Identifiable {
    associatedtype ID
    static var idKey: WritableKeyPath<Self, ID> { get }
}

struct Book: Identifiable {    // error: Type 'Book' does not conform to protocol 'Identifiable'
    static let idKey = \Book.isbn
    let isbn: String
    var title: String
}

我很好奇为什么会这样。我试图在Xcode Playground文件中运行代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-01 08:31:34

这是一个WritableKeyPath -你需要给它写信。它必须是一个变量才能写。

在您的图书结构中,您正在用文本实例化一个WritableKeyPath。当不是KeyPath时,失败

在文档中:“支持读取和写入结果值的关键路径。”

这意味着基础值必须是变量。

以下是汇编:

代码语言:javascript
复制
import UIKit


//https://iswift.org/playground?ZEJ6cL&v=4

protocol Identifiable {
    associatedtype ID
    static var idKey: WritableKeyPath<Self, ID> { get }
}

struct Book: Identifiable {
    static let idKey = \Book.title
    let isbn: String
    var title: String
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57304760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档