1. ホーム
  2. swift

[解決済み] Codableクラスはプロトコルに準拠していない Decodable

2023-03-31 15:16:35

質問

Type 'Bookmark' does not conform to protocol '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
   }
}

Publication は Bookmark を所有しますが、Bookmark はどの Publication に属しているかを知る必要があるため、Publication の var を保存したくありません。Publicationのdecode initは、ブックマークの参照を自分自身に設定します。

どのように解決するのですか?

Type 'Bookmark' does not conform to protocol 'Decodable'" というエラーメッセージが表示されるのですが。

PublicationがDecodableでないためか(それが何であるかが示されていないので、判断が難しい)、あるいは、Publicationにある weak に指定されている publication .

いずれにせよ、修正するのは簡単です。 init(from:) を実装するだけでDecodableの実装が完成します。コンパイラは単にこの実装は合成できないことを伝えているのです。