Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >类不符合可编码的

类不符合可编码的
EN

Stack Overflow用户
提问于 2020-09-15 19:18:20
回答 1查看 512关注 0票数 1

但是,收到一条错误消息,指出我的类'Expenses‘不符合协议'Decodable’&类型'Expenses‘不符合协议'Encodable’。

代码语言:javascript
运行
AI代码解释
复制
import Foundation

class Expenses : ObservableObject, Codable  {
    
    @Published var items : [ExpenseItem] {
        // Step 1 creat did set on publsihed var.
        didSet {
            let encoder = JSONEncoder()
            if let encoded = try? encoder.encode(items) {
                UserDefaults.standard.set(encoded, forKey: "Items")
            }
        }
    }

    init() {
        if let items = UserDefaults.standard.data(forKey: "Items") {
            let decoder = JSONDecoder(
            if let decoded = try?
                decoder.decode([ExpenseItem].self, from: items) {
                self.items = decoded
                return
            }
        }
        self.items = []
    }     
}

我的费用项被标记为

代码语言:javascript
运行
AI代码解释
复制
struct ExpenseItem : Identifiable, Codable   {
    let id = UUID()
    let name : String
    let type : String
    let amount : Int       
}
EN

回答 1

Stack Overflow用户

发布于 2020-09-15 20:52:49

当所有存储的属性都符合Encodable/Decodable时,符合Encodable/Decodable是自动合成的,但是在属性上使用属性包装器意味着现在属性包装器类型需要符合Encodable/Decodable

@Published属性包装不符合。如果只在Published类型本身上实现一致性就好了,但不幸的是它没有公开包装值,所以如果不使用反射(我在网上看到了一些建议),我认为这是不可能的。

您需要手动实现一致性:

代码语言:javascript
运行
AI代码解释
复制
class Expenses : ObservableObject {
   @Published var items : [ExpenseItem]

   // ... rest of your code
}

extension Expense: Codable {
   enum CodingKeys: CodingKey {
      case items
   }
    
   func encode(to encoder: Encoder) throws {
      var container = encoder.container(keyedBy: CodingKeys.self)
      try container.encode(self.items, forKey: .items)
   }

   required init(from decoder: Decoder) throws {
      var container = try decoder.container(keyedBy: CodingKeys.self)
      self.items = try container.decode([ExpenseItem].self, forKey: .items)
   }      
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63908507

复制
相关文章
idea中运行jar程序
前言:今天在学习大数据中的项目的时候遇到了jar包。我之前就有看到在jdk中是有很多的jar包的。请看图如下。jdk中jar包确实很多,怪不得我们的程序都得以来jdk才能运行。
用户10271432
2022/12/19
1K0
idea中运行jar程序
解决xshell关闭jar停止运行的问题
在项目文件夹下新建一个txt文件,名字随意 运行 nohup java -jar xxx.jar >./temp.txt 2>&1 &
许喜朝
2020/11/09
1.7K0
制作可自运行的jar可执行文件
今天看到有人把Java的jar包制作成一个可执行文件,于是乎我也试了一把,确实也挺简单的,记录一下。
kongxx
2018/11/09
1.6K0
开发:异常收集之 运行jar包的问题
在本地cmd环境测试通过,放到linux服务器 发现运行java -jar XXX 失败
执笔记忆的空白
2020/12/25
4410
关于lr调用jar在vuser中可以运行,但是controller中却报错的问题
如题,错误如下:javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found 查找了很多地方,没有找到原因,很偶然的在一个帖子里面发现了上述错误,虽然不是loadrunner的。但还是拿来试了试。居然解决了这个问题。 方法:在java vuser中的init中加上如下两句话: System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");         System.setProperty("javax.xml.parsers.SAXParserFactory","com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl");
流柯
2018/08/30
8780
elasticsearch - Lucene分片内部逻辑
在一个分片中(Lucene),数据(数据原文和倒排索引)以段为单位存储,只有成为段的数据才能被检索。
执生
2020/11/13
8640
elasticsearch - Lucene分片内部逻辑
如何直接运行jar包_怎么运行jar文件
nohup:不挂断地运行命令,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中
全栈程序员站长
2022/11/10
2.7K0
运行 jar 出现"中没有主清单属性"
在运行通过 “java -jar xxx.jar” 的时候, 报 “中没有主清单属性” 错误.
芥末鱿鱼
2022/05/05
7.2K0
windows 运行jar包 生成日志_jar包双击运行
然后修改文件的扩展名为 .bat 或 .cmd 两者在windows都是可以运行的
全栈程序员站长
2022/11/09
3K0
windows 运行jar包 生成日志_jar包双击运行
Lucene&Solr&ElasticSearch-面试题
Lucene是apache下的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。官网地址:https://lucene.apache.org/
java思维导图
2019/12/05
2.2K0
Lucene+Solr+ElasticSearch查询匹配优化
当我们在处理搜索业务时候,需求往往是灵活多变的,有时候我们需要精确匹配,有时候我们又需要全文检索,而有时候,我们又想匹配度高而且还能全文检索,这似乎是精确匹配和模糊匹配一个妥协的策略,没错这就是搜索引擎出现的目的,以往的数据库是没法解决这种问题的,数据库只能回答有,没有,存在,不存在,并不能在有和没有之间做一个完美的妥协,比如说能把最匹配最相关的结果放在topN,仅靠like模糊查询是解决不了这种问题的。 Apache Lucene这个强大的全文检索核心包,提供了搜索引擎的核心组件,通过相关性评分算法
我是攻城师
2018/05/14
1.3K0
springboot打包jar运行
修改pom.xml文件:  增加  <packaging>jar</packaging> 增加build配置:  <build>     <plugins>         <plugin>     
仙士可
2021/04/08
2.4K0
Centos后台运行jar
jar后台运行 nohup java -jar xx.jar >/dev/null & 此处的“>/dev/null”作用是将终端输出信息输出到空洞中,即不保存输出信息,若要查看输出信息需指定输出到那个文件,例如“>/xxx/yyy.out” ---- 关闭后台进程 先查看后台进程pid ps -aux 记住进程pid,然后kill命令关闭 kill [pid] 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pwc1996/article/de
庞小明
2018/07/06
1.9K0
怎么运行jar包
首先我们需要有一个Java环境,接着在命令行中使用java -jar命令即可。以下是基本操作的示例。
很酷的站长
2023/10/20
1.1K0
怎么运行jar包
Lucene、solr以及elasticsearch之间的区别和联系
Lucene是一套信息检索工具包,并不包含搜索引擎系统,它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用Lucene时仍需要关注搜索引擎系统,例如数据获取、解析、分词等方面的东西。而solr和elasticsearch都是基于该工具包做的一些封装。
wuweixiang
2018/08/14
4.1K0
Lucene、solr以及elasticsearch之间的区别和联系
双击运行 jar 文件
运行,但是总归是麻烦些,要是能双击直接打开岂不是很方便,下面我们就来一起看看怎么操作吧
攻城狮杰森
2022/06/03
2.6K0
双击运行 jar 文件
linux运行jar的几种方式
&表达的意思是在后台运行。这种方式可以避免打断后程序停止的问题,但是避免不了关闭当前终端后程序停止的问题。
Libertyyyyy
2022/10/25
2K0
Could not load codec 'Lucene54'. Did you forget to add lucene-backward-codecs.jar?
将lucene的版本更新到6.4.2之后,运行时出现了这个异常,在maven中央仓库搜了下“ lucene-backward-codecs”找到了
johnhuster的分享
2022/03/29
5250
Could not load codec 'Lucene54'.  Did you forget to add lucene-backward-codecs.jar?
windows中启动 java -jar 后台运行程序
第一种需要一直开着dos界面: java -jar jar文件路径 第二种无需一直开着dos界面: 1.新建my-service.bat文件,内容如下: @echo off  START "my-service" javaw -jar science-0.0.1-SNAPSHOT.jar 2.然后直接运行my-service.bat文件即可
Java架构师必看
2021/10/18
4.9K0
点击加载更多

相似问题

Elasticsearch lucene查询

12

Lucene到Elasticsearch

13

Elasticsearch或Lucene

25

ElasticSearch中复杂的Lucene查询

10

grafana中的Elasticsearch lucene查询

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文