gpt4 book ai didi

swift - 为什么不能在以下示例中使用结构的常量属性

转载 作者:行者123 更新时间:2023-11-28 05:39:36 24 4
gpt4 key购买 nike

我有 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
}

它工作正常。但是,如果我使用 let 而不是 var 更改 isbn 属性的 Book 声明,我会收到一个错误: 类型“Book”不符合协议(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 文件中运行代码。

最佳答案

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

在您的 Book 结构中,您正在使用文字实例化 KeyPath。当 KeyPath 不是 WritableKeyPath

时失败

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

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

以下编译:

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
}

关于swift - 为什么不能在以下示例中使用结构的常量属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57304760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com