私がやりたい:JSONDecoder()
を使用して`RLMArray`がプロトコルに準拠していない 'エンコード可能な'
- 、私は
json
Realm
にオブジェクトを変換します。 - このオブジェクトを
Realm
データベースに保存します。
問題:
RLMArray
はCodable
プロトコルを適用しません。- 私はプロトコル
Decodable
に準拠することができましたが、Codable
できませんでした。
エラーメッセージ:
- タイプ '人' 'エンコード可能な'
コードプロトコルに準拠していません。
public class Hobby: Object, Codable {
@objc dynamic var title: String?
@objc dynamic var category: String?
}
public class Person: Object, Codable { // Error: Type 'Person' does not conform to protocol 'Encodable'
@objc dynamic var name: String?
@objc dynamic var hobbies: RLMArray<Hobby>?
required convenience public init(from decoder: Decoder) throws {
self.init()
let container = try decoder.container(keyedBy: CodingKeys.self)
name = try container.decode(String.self, forKey: .name)
hobbies = try container.decode(RLMArray<Hobby>?.self, forKey: .hobbies)
}
}
func sample() {
let person = try? JSONDecoder().decode(Person.self, from: "{\"name\" : \"aaa\",\"hobbies\" : [{\"title\" : \"fishing\",\"category\" : \"outdoor\"},{\"title\" : \"reading\",\"type\" : \"indoor\"}]}".data(using: .utf8)!)
print(person)
let realm = try! Realm()
try! realm.write {
realm.add(person!)
}
}
あなたはいくつかのアイデアを持っていますか?
Swift4 RealmSwift
。 – EpicPandaForce
なぜこのコードスニペットで 'RLMArray'を使っているのですか?あなたのクラスは 'Object'から派生しています。これはあなたがRealm Swiftを使っていることを示していますので、' List'を使うべきです。 – bdash
@EpicPandaForce最後に、APIレスポンスが複雑であったため、データベーススキーマ定義とAPIレスポンスに分割することにしました。どうもありがとうございました。 –