为什么我会收到"类型‘Bookmark’不符合协议‘Decodable’"的错误消息?

class Bookmark: Codable {
   weak var publication: Publication?
   var indexPath: [Int]
   var locationInText = 0

   enum CodingKeys: String, CodingKey {
      case indexPath
      case locationInText
   }

   init(publication: Publication?, indexPath: [Int]) {
      self.publication = publication
      self.indexPath = indexPath
   }
}

我不想保存出版物变量,因为该出版物拥有书签,但书签需要知道它属于哪个出版物.发布的decode init将书签引用设置为自身.

推荐答案

为什么我会收到"类型‘Bookmark’不符合协议‘Decodable’"错误消息

这要么是因为出版物是不可解码的(你还没有展示它是什么,所以很难说),要么是因为publication上有weak个名称.

无论哪种方式,都很容易修复:只需实现init(from:)即可完成可解码的实现;编译器只是告诉您,这个实现无法合成.

Swift相关问答推荐

如何将EnvironmentObject从UIKit视图控制器传递到SwiftUI视图

在Xcode SWIFT中运行用Ionic编写的函数

如何在SWIFT Memory中处理对VAR数组的更新(对COW感到困惑)

调度组是否阻止iOS中的主线程?

有条件地在同一视图上设置两个不同的过渡

使用异步收集发布者值

将 Encodable 扩展添加到 Swift 嵌套枚举

Swift 中的Combine和didSet有什么区别?

持久化字符串列表属性 RealmSwift

Reality Composer Tap Trigger 问题

SwiftUI Observed Object 在发布值更改时未更新

为什么更改属性后动画会加速? SwiftUI

在视图中设置所有变量

在 Swift 4 中,如何删除基于块的 KVO 观察者?

将if let与逻辑或运算符一起使用

Swift 3:日期与 NSDate?

DispatchQueue:不能在非主线程上使用 asCopy = NO 调用

在 Swift 中指定 UITextField 的边框半径

使用 Swift 以编程方式自定义 UITableViewCell

Switch 语句中的字符串:String不符合协议IntervalType