Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >编码符合结构的@已发布数组的可编码一致性

编码符合结构的@已发布数组的可编码一致性
EN

Stack Overflow用户
提问于 2020-10-04 19:04:26
回答 2查看 355关注 0票数 0

我正在修改URLSession,实际上是在构建一个超级简单的应用程序,将一个JSON文件加载到ContentView中,就像一个来自Facebook的好友列表一样,我想要的不是任何错误,而是Swift的Codable协议的内部工作方式。下面是一些代码和解释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct User: Identifiable, Codable {
    struct Friend : Identifiable, Codable {
        var name : String
        var id : String
    }

    var id : String
    var isActive: Bool
    var name : String
    var age: Int
    var company : String
    var address : String
    var about : String
    var registered : String
    
    var friends : [Friend]
    
    var checkIsActive: String {
        return self.isActive ? "" :""
    }
    
}

综上所述,我有一个User结构,它包含一系列符合Codable的属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class UsersArrayClass: ObservableObject {
    @Published var userArray = [User]() 
}

但是,我有另一个类,UsersArrayClass,它创建一个@Published var userArray of User结构对象。这个类符合@ObservableObject协议,但当然,当我试图使它符合Codable时,不太可能是因为@Published属性包装器正在应用于数组本身.这在本质上让我感到困惑,尽管如果用户结构符合Codable,那么为什么包含User对象的userArray也不自动符合Codable呢?

我在想,也许把所有这些都加载到核心数据模型中可以解决我的问题,但是除非我明白我在这里遗漏了什么,否则我仍然无法继续前进,因此,预先感谢您的任何输入。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-06 02:09:23

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 Cannot automatically synthesize 'Encodable' because 'Published<[User]>'
 does not conform to 'Encodable' @Published var userArray = [User]()
 */

// Published declaration
@propertyWrapper struct Published<Value> { ... }

发布的不符合当前中的可编码协议或任何通用协议

试图使PublishedCodeable一致,导致以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 Implementation of 'Decodable' cannot be
 automatically synthesized in an extension in a different file to the type
 */
extension Published: Codable where Value: Codable {}
票数 -1
EN

Stack Overflow用户

发布于 2020-11-21 01:11:06

这很麻烦,但是我们可以通过扩展将Codable一致性添加到Published中,尽管缺乏对Published内部的访问。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
extension Published: Codable where Value: Codable {
    public func encode(to encoder: Encoder) throws {
        guard
            let storageValue =
                Mirror(reflecting: self).descendant("storage")
                .map(Mirror.init)?.children.first?.value,
            let value =
                storageValue as? Value
                ??
                (storageValue as? Publisher).map(Mirror.init)?
                .descendant("subject", "currentValue")
                as? Value
        else { fatalError("Failed to encode") }
        
        try value.encode(to: encoder)
    }
    
    public init(from decoder: Decoder) throws {
        self.init(initialValue: try .init(from: decoder))
    }
}

快速检查:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class User: ObservableObject, Codable {
    @Published var name = "Paul"
}

struct ContentView: View {
    @ObservedObject var user = User()
    var body: some View {
        let data = try? JSONEncoder().encode(user)
        let dataFromStr = """
                {
                    "name": "Smith"
                }
                """
            .data(using: .utf8)
        let decoded = try! JSONDecoder().decode(User.self, from: dataFromStr!)
        return
            VStack{
                Text(verbatim: String(data: data!, encoding: .utf8) ?? "encoding failed")
                Text(decoded.name)
            }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64201957

复制
相关文章
Anbox:在 Linux 上运行 Android 应用程序的简单方式
Anbox 是 “Android in a box” 的缩写。Anbox 是一个基于容器的方法,可以在普通的 GNU/Linux 系统上启动完整的 Android 系统。
用户8639654
2021/09/23
5.2K0
7个有用的Pandas显示选项
andas是一个在数据科学中常用的功能强大的Python库。它可以从各种来源加载和操作数据集。当使用Pandas时,默认选项就已经适合大多数人了。但是在某些情况下,我们可能希望更改所显示内容的格式。所以就需要使用Pandas的一些定制功能来帮助我们自定义内容的显示方式。
deephub
2023/02/01
1.3K0
使枚举类型的选项在VS的属性窗里显示为中文
我们自己做的组件,一般希望它的属性在设计时能够在属性窗里显示为中文,可以在属性上添加System.ComponentModel.DisplayNameAttribute标注达到这个目的。但是,枚举的选项如何以中文的形式显示在属性窗里呢?
明年我18
2019/09/18
1.2K0
使枚举类型的选项在VS的属性窗里显示为中文
Spring Boot 如何以 Web 应用的方式启动
https://www.cwiki.us/display/SpringBootZH/questions/57938770
HoneyMoose
2020/04/04
4510
Spring Boot 如何以 Web 应用的方式启动
带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败
就地编辑文件(如果提供了后缀,则进行备份),可见参数后缀 SUFFIX 是可选的,即带或者不带这个参数都可以执行。
程序熵
2023/09/25
3770
带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败
EXCEL单元格的引用方式
EXCEL单元格的引用包括相对引用、绝对引用和混合引用三种。 相对引用   公式中的相对单元格引用(例如 A1)是基于包含公式和单元格引用的单元格的相对位置。如果公式所在单元格的位置改变,引用也随之改变。如果多行或多列地复制公式,引用会自动调整。默认情况下,新公式使用相对引用。例如,如果将单元格 B2 中的相对引用复制到单元格 B3,将自动从 =A1 调整到 =A2。 绝对引用   单元格中的绝对单元格引用(例如 $A$1)总是在指定位置引用单元格。如果公式所在单元格的位置改变,绝对引用保持
用户1075292
2018/01/23
1.4K0
将jpeg图片显示在framebuffer上
点击(此处)折叠或打开 /************************************************** * example5.c * Author: T-bagwell * * Compile:gcc -Wall example5.c -o example5 *************************************************/ #include <stdio.h> #inclu
用户3765803
2019/03/05
1.2K0
跳跃表---用简单的方式实现有序集合
遍历整个链表,时间复杂度为O(n),例如我们向查找7,即node4,需要4次查找
用户3946442
2022/04/11
4230
跳跃表---用简单的方式实现有序集合
[ASP.NET Core 3框架揭秘] Options[2]: 配置选项的正确使用方式[下篇]
前面演示的几个实例具有一个共同的特征,即都采用配置系统来提供绑定Options对象的原始数据,实际上,Options框架具有一个完全独立的模型,可以称为Options模型。这个独立的Options模型本身并不依赖于配置系统,让配置系统来提供配置数据仅仅是通过Options模型的一个扩展点实现的。在很多情况下,可能并不需要将应用的配置选项定义在配置文件中,在应用启动时直接初始化可能是一种更方便快捷的方式。
蒋金楠
2020/02/12
9320
显示器 设置选项 解析
明亮度 Gama:显示器的输出图像对输入信号的失真程度。 DCR:Dynamic Contrast Ratio,动态对比率。自动判断画面整体亮度,对画面各部分进行亮度调整,使细节更清晰,层次更分明。 颜色设置 色温 暖色 正常 冷色 sRGB:RGB(色彩空间)的一种标准。 DCB模式 OSD设置 其他 DDC/CI:Display Data Channel Command Interface,基于DDC/CI协议,用户可以通过鼠标和人性化的软件界面来完成显示器的各项设置和色彩调节,
JNingWei
2018/09/28
1.6K0
直接iframe方式在网页上显示天气插件
天气预报调用网址(可定制):http://www.tianqi.com/plugin/
科控物联
2023/09/22
1.4K0
直接iframe方式在网页上显示天气插件
PageRank算法在spark上的简单实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/51383232
用户1148526
2019/05/25
1.5K0
Excel表格的35招必学秘技[配图]
一、让数据按需排序   如果你要将员工按其所在的部门进行排序,这些部门名称既的有关信息不是按拼音顺序,也不是按笔画顺序,怎么办?可采用自定义序列来排序。   1.执行“格式→选项”命令,打开“选项”
ytkah
2018/03/06
7.6K0
Excel表格的35招必学秘技[配图]
显示方式
08.05自我总结 一.显示方式 1.display 常用的三种方式 #第一种block 1.支持设置宽高 2.自带换行 一般情况所有有宽高、参与位置布局的都是block #第二种inline 1.不支持设置宽高,宽高只能有文本撑开 2.不带换行,一行显示不下会自动换行(保留数据的整体性) 一般情况存放文本的 #第三种inline-block 1.支持设置宽高 2.不带换行,一行显示不下会自动换行(以标签整体换行,标签左右有间距) 一般情况不去主动设置该显示方式,系统的两个img、input都设置为了单
小小咸鱼YwY
2019/09/11
6530
支持公式的3款Excel替代品
随着大数据、企业数字化转型等不可逆趋势的推动下,似乎一切变得皆可量化和数据化,企业在解决问题时,也更为倾向于以数据表格来作为判断决策是否正确的重要标志,这时具有数据思维和数据分析处理技能,成了当前及未来人才发展不可忽视的能力之一。今天给大家带来3款Excel替代品的对比,由大家来评判一下。
用户10264843
2023/02/09
3.5K0
[ASP.NET Core 3框架揭秘] Options[1]: 配置选项的正确使用方式[上篇]
依赖注入不仅是支撑整个ASP.NET Core框架的基石,也是开发ASP.NET Core应用采用的基本编程模式,所以依赖注入十分重要。依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象。
蒋金楠
2020/02/12
1.1K0
mapboxGL卷帘实现
卷帘对比是webgis中常见的一种对比方式,本文讲述一下如何在mapboxGL中实现卷帘对比。
牛老师讲GIS
2021/09/10
1.8K0
在ListView上使用自定义的Adapter
需要实现的东西是: 一个DataListViewAdapter,当进行如下调用时,就能在列表上显示出数据:
LeoXu
2018/08/15
9700
点击加载更多

相似问题

如何以编程方式在自定义单元格上添加自定义视图?

11

简单产品上的自定义选项无法在订单上显示

31

如何以简单的方式显示加载指示器?

211

简单的Kivy手势(卷帘)

10

如何以简单的方式在Mac上安装gst (gstreamer绑定)?

27
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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