我从Swift设计模式书中获得以下代码:
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'。因此,整个错误代码看起来如下:
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文件中运行代码。
发布于 2019-08-01 08:31:34
这是一个WritableKeyPath -你需要给它写信。它必须是一个变量才能写。
在您的图书结构中,您正在用文本实例化一个WritableKeyPath。当不是KeyPath时,失败
在文档中:“支持读取和写入结果值的关键路径。”
这意味着基础值必须是变量。
以下是汇编:
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
}https://stackoverflow.com/questions/57304760
复制相似问题