Swift 4 Codable Realm 对象子类

2024-04-25

尝试将我的一些代码库切换到 Swift 4 的新版本Codable协议。我的设置看起来像这样:

class Base: Object, Codable {

    dynamic var id: String = ""
    dynamic var timestamp: String = ""

    private enum CodingKeys: String, CodingKey {

        case id = "_id"
        case timestamp = "timestamp"

    }

}

class User: Base {

    dynamic var name: String = ""

    private enum CodingKeys: String, CodingKey {
        case name = "name"
    }

    required init(from decoder: Decoder) throws {

        let container = try decoder.container(keyedBy: CodingKeys.self)
        self.name = try container.decode(String.self, forKey: .name)
        try super.init(from: decoder)

    }

}

我有一个符合以下条件的基本领域对象类Codable,以及一个子类Base它也有自己的编码键。我覆盖init(decoder:) on the User子类来映射我的附加编码键,然后调用super.init(decoder:) to map Base的编码键。但是,一旦我覆盖init(decoder:)我收到以下错误:

  • 所需的初始化程序“init()”必须由“Base”的子类提供
  • 所需的初始化程序“init(realm:schema:)”必须由“Base”的子类提供
  • 所需的初始化程序“init(value:schema:)”必须由“Base”的子类提供

我不确定解决这些问题的正确方法是什么。


你不能覆盖init()或 Realm 的其他初始化器Object。您可以改用便利初始化程序。那么你就不能打电话super.init(from:),因此定义一个解码超类属性的方法,例如Base.decode(from:).

请参阅以下代码示例:

class Base: Object, Codable {
    dynamic var id: String = ""
    dynamic var timestamp: String = ""

    private enum CodingKeys: String, CodingKey {
        case id = "_id"
        case timestamp = "timestamp"
    }

    func decode(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        self.id = try container.decode(String.self, forKey: .id)
        self.timestamp = try container.decode(String.self, forKey: .timestamp)
    }
}

class User: Base {
    dynamic var name: String = ""

    private enum CodingKeys: String, CodingKey {
        case id = "_id"
        case timestamp
        case name = "name"
    }

    required convenience init(from decoder: Decoder) throws {
        self.init()

        try decode(from: decoder)

        let container = try decoder.container(keyedBy: CodingKeys.self)
        self.name = try container.decode(String.self, forKey: .name)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 4 Codable Realm 对象子类 的相关文章

  • iPhone 拒绝了发布请求 未说明

    iPhone 拒绝了发布请求 内部启动错误 进程启动失败 未指定 这个错误让我抓狂 我似乎无法解决它 我从发现的所有地方都做了以下操作 刷新证书 注销并进入开发者苹果帐户 下载手动证书 删除 Apple 全球证书 重新启动 Mac 和 iP
  • 如何更改 UIImage 的颜色? [复制]

    这个问题在这里已经有答案了 我不想改变图像的背景颜色 而是改变整个图像的颜色 但问题是 我只能改变backgroundColor 接受的答案是正确的 但还有更多easy way for UIImageView Obj C UIImage i
  • GCD获取队列名称/标签

    如何获取当前队列名称 我的意思是队列标签com example myqueue 在 Xcode 4 调试器中我只能看到 block invoke 1 怎么样dispatch queue get label http developer ap
  • 为什么 CGPath 和 UIBezierPath 在 SpriteKit 中对“顺时针”的定义不同?

    在 SpriteKit 中 clockwise方向相反UIBezierPath但不是为了CGPath 例如 如果我有 do let path CGPathCreateMutable CGPathAddArc path nil 0 0 10
  • 使用 JSON 将 iTunes 中的图像解析为 tableviewcontroller

    我正在尝试从中解析数据数据源 http ax itunes apple com WebObjects MZStoreServices woa ws RSS topsongs limit 30 json 标题已正确解析并显示 但解析图像时出现
  • Mapbox-iOS-SDK 6.3.0 Pod 安装错误 403 Forbidden

    下载Mapbox示例 运行pod install 报错 403 Forbidden 为什么 请帮忙 谢谢 pod Mapbox iOS SDK gt 6 3 0 ios sdk examples 298e050be7352eb28cee6f
  • clickedButtonAtIndex 方法未被调用

    当用户点击按钮时UIAlertView the clickedButtonAtIndex应该调用方法 但是 它没有 in the h我已经打电话给UIAlertView协议 interface RechercherViewControlle
  • 以编程方式添加 TabBarController

    我想以编程方式制作标签栏控制器和导航控制器 到目前为止 我的代码有效 它在底部显示了一个选项卡栏 但 OptionViewController 在第二个选项卡栏的按钮上没有说任何内容 没有标题 有趣的是 当我单击没有任何内容的按钮时 标题出
  • 如何简化 Swift Enum 自定义 init

    我创建了一个带有字符串类型的枚举 它有两个 init 方法 一种是使用 rawValue 的默认 init 方法 另一种是使用 intValue 的自定义 init 方法 我是这样写的 有没有什么简单的方法可以不使用两个开关盒 enum R
  • ios safari - getUserMedia 无法正常工作

    我真的有this https stackoverflow com q 45692526 6048715问题 但 OP 的解决方案对我不起作用 重申一下 我正在使用navigator mediaDevices getUserMedia 在浏览
  • 使用未解析的运算符 <=

    我正在尝试使用 Swift 3 for 循环 但没有成功 这是我所拥有的 for assumedPayRate Double in 0 25 lt billRate where assumedPayRate 0 25 On the lt 它
  • 在真实设备上通过命令行实现 UIAutomation

    我知道从Xcode 4 2可以运行UIAutomation通过命令行编写脚本 我已经尝试过这个并且在模拟器中对我来说工作得非常好 我想知道如何在实际设备中运行此命令 我搜索并获取了在设备上运行的命令 instruments w
  • sqlite 3“SQL 错误‘内存不足’(7)”objc

    嗨 有人可以指出我做错了什么吗 错误是这样的 SQL error out of memory 7 NSArray RecipeInfo NSMutableArray retval NSMutableArray alloc init NSSt
  • UIImagePickerController 和 iCloud 照片

    切换到 iCloud Photo 后 似乎 UIImagePickerController 返回的一些图像非常模糊 看起来该图像是从 iCloud 照片中获取的 我是否能够检索原始图像 或过滤掉 iCloud 照片图像 或者我是否必须切换到
  • 在 Swift 中将函数作为参数传递

    在 iOS 8 中 我的以下功能按我的预期工作 func showConfirmBox msg String title String firstBtnStr String secondBtnStr String caller UIView
  • SwiftUI:如何横向呈现全屏覆盖

    我正在制作一个应用程序 其中多个页面 视图嵌入到具有选项卡栏 菜单栏和标题的父视图中 如下所示 HeaderView MenuView TabView selection selected HomeView Page2View Page3V
  • 如何使用 swift flatMap 从数组中过滤掉选项

    我对 flatMap 有点困惑 添加到 Swift 1 2 假设我有一些可选类型的数组 例如 let possibles Int nil 1 2 3 nil nil 4 5 在 Swift 1 1 中 我会做一个过滤器 然后是一个像这样的地
  • 错误:将构建上传到 iTunes Connect 时,Swift 支持无效

    我正在提交 TestFlight 发行版的第一个版本 但收到以下错误 位码已关闭 其他答案似乎相当旧 所以我想我会在 2018 年重新询问 无效的 Swift 支持 文件 libswiftDarwin dylib libswiftMetal
  • UIImageView 没有调用drawRect

    我的 IB 中有一个 UIImageView 我用一个方法 drawRect 创建了 UIImageView 的子类 implementation UIImageViewLine void drawRect CGRect rect NSLo
  • 由于某种原因,AdColony 的 AdReward 无法在 Swift 2.0 上运行

    我想在我的游戏中实现奖励插页式广告 但我收到了很多 AdColony 错误 例如 未填写广告请求 或我的区域 ID 无效 首先 这就是我配置 AdColony 区域的方式 Zone is active Yes Zone Type Prero

随机推荐

  • 奇数运算符优先级/关联性行为[重复]

    这个问题在这里已经有答案了 在 Python 2 7 中 下面的内容是怎么回事 True w in what 两者的行为都不同 True w in what and True w in what gt gt gt True w in wha
  • 当你用 mlockall 设置的内存用完时会发生什么?

    我正在开发一个需要大量内存才能批量运行的 C 应用程序 gt 20GB 我的一些客户遇到了内存限制 有时操作系统开始交换 总运行时间加倍或更糟 我读到可以使用 mlockall 来防止进程被换出 当进程内存需求以这种方式接近或超过可用物理内
  • 如何在JPA中反映“嵌套集”模型

    很好用嵌套集 http www evanpetersen com item nested sets html对于分层数据 但在这个设计中 如果删除或插入一些数据 您应该始终计算右侧和左侧节点 此外 您没有任何外键 我如何用 JPA 反映这个
  • python模拟下面的return_value是什么

    我对 python 模拟很陌生 所以只是想理解它 在下面的代码中 下面指出的 1 和 2 语句之间有什么区别 因为最后我可以设置mock response status code与任一陈述 import requests def get d
  • Safari - 视频加载速度太慢

    我在将视频添加到我的网站时遇到了一些麻烦 我使用这段代码
  • 使用自己的路径在不同的 python 可执行文件下生成 multiprocessing.Process

    我有两个版本的Python 实际上是两个conda环境 path to bin 1 python path to bin 2 python 我想从一个版本的 python 启动一个在另一个版本中运行的函数 使用类似multiprocessi
  • 敲除验证

    我有一个 asp net mvc3 项目 我在其中使用淘汰赛绑定对表进行批量编辑 我想在保存数据时进行必需验证和数字验证等验证 有没有更简单的方法来进行淘汰验证 PS 我没有使用表格 看一下敲除验证 https github com eri
  • 井字游戏的极小极大

    我正在尝试用简单的极小极大算法来解决井字游戏 简单 但应该涵盖很多语言 到目前为止我所拥有的 该板表示为 9 个 未绑定 变量的数组 这些变量可以设置为x or o 获胜条件基本上是 win Player X1 X2 X3 X1 Playe
  • 如何在 IAR EWARM 5.4 中抑制警告(从错误转换)

    我有一个用于日志记录的宏 它接受可变数量的参数 该宏将由 GCC 在非嵌入式上下文中处理 并扩展为有效的 C 代码 尽管如此 无论我在何处调用宏 数千个位置 IAR EWARM 都会给出错误 Pe054 宏调用中的参数太少 EWARM 确实
  • AngularJS 阻止 symfony2 表单中的提交按钮

    我在 symfony2 中创建了表单 最后呈现了提交表单的按钮 当我添加ng app myApp 一切正常 但我无法提交此页面上的表单 为什么会这样以及如何解锁 FORM gt add company choice array mapped
  • NSAssert 与断言:您使用哪个以及何时使用?

    最近 我读到了两条非常有趣的建议 在评论中这个 StackOverflow 答案 https stackoverflow com questions 1375786 whats the point of nsassert actually
  • 如何将多个身份验证提供商链接到 Firebase 帐户?

    我无法成功执行此操作 我按照 Firebase 文档上的说明执行了以下步骤 使用现有的身份验证提供程序登录使用 我的案例 脸书 完成新身份验证提供程序的登录流程 直至 但不包括 调用其中之一Auth signInWith方法 我的情况 我想
  • Oauth2 Google 身份验证流程 - Next.JS / Express

    我正在使用 React Next Js 前端 并尝试通过 Google 的 Oauth2 策略实现身份验证 我对这个过程感到非常困惑 目前在客户端上 我有一个 Google 登录组件 其中包含客户端 ID 并且可以检索访问令牌
  • 如何将查询结果放入文本字​​段?

    我正在创建一个会计数据库 对于财务结果 我的表 单有一个文本字段 Previous Solde 其中显示了前几个月的销售情况 确切的金额是通过以下查询计算出来的 SELECT sq Argenta Prep Vorig Saldo Acco
  • 为什么导入在 setuptools Entry_point 脚本中失败,但在 python 解释器中却失败?

    我有以下项目结构 project project py init py setup py lib init py project init py tools py with project py from project lib impor
  • 从 Java 访问 Firefox 的证书信任存储

    我对这个几乎失去希望了 我正在尝试使用 Firefox 安装附带的 NSS 库通过 PKCS 11 从 Java 7 访问 Firefox 信任存储 这是代码 import java security KeyStore import jav
  • Spring 测试 DBunit 警告

    我正在使用 spring test dbunit 并且在单元测试中收到一条警告 其中包含以下消息 Code RunWith SpringJUnit4ClassRunner class ContextConfiguration locatio
  • jQuery 中的“this”是什么意思? [复制]

    这个问题在这里已经有答案了 在 jquery 中 什么是this手段以及何时使用 this在 JavaScript 中是非常特殊和强大的 它几乎可以意味着任何事情 我涵盖了其中一些here http blog niftysnippets o
  • 如何使用 nimbus-jose-jwt 解码 JWT 令牌以获取标头和有效负载的详细信息?

    我有以下内容JWT 令牌我想解码 eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsing1dCI6Ik5UQXhabU14TkRNeVpEZzNNVFUxWkdNME16RXpPREpoWldJNE5ETmxaRFU
  • Swift 4 Codable Realm 对象子类

    尝试将我的一些代码库切换到 Swift 4 的新版本Codable协议 我的设置看起来像这样 class Base Object Codable dynamic var id String dynamic var timestamp Str