创建领域列表的语法

Syntax to create a Realm List

我正在使用 Realm 数据库 (RealmSwift),我想将列表值添加到我的数据库中。我的第一个数据库是学生数据库:

import Foundation
import RealmSwift

class Student: Object {

dynamic var identifier = ""
dynamic var name = ""
dynamic var university = ""
let subjects = List<Subjects>()  
override static func primaryKey() -> String? {
   return "identifier"
    }

  }

我的主题数据库很简单:

import Foundation
import RealmSwift

class Subjects: Object {

dynamic var identifier = ""
dynamic var name = "" 

override static func primaryKey() -> String? {
   return "identifier"
    }

  }

现在,我不确定在创建包含列表值的变量时使用什么正确的语法。

  try! realm.write() {
let myStudent = realm.create(Student.self, value: ["identifier" : "1",    "name" : "James", "university" : "Stanford", "subjects" : "Engineering",  "Mathematics", "Physics"] ) 

realm.add(我的学生)

我怎样才能为列表中的每个主题添加标识符?

你需要使用数组,就像这样:

let myStudent = realm.create(Student.self, value: ["identifier" : "1",    "name" : "James", "university" : "Stanford", "subjects" : ["Engineering",  "Mathematics", "Physics"] ] )

我认为你需要先用一个字典创建 Student,然后用单独的字典一个一个地创建 Subject 作为 Realm 对象,然后将它们添加到父 Student 如下所示:

let realm = try! Realm()

try! realm.write() {

  let studentDict = [
    "identifier" : "2",
    "name" : "James",
    "university" : "Stanford",
  ]


  let subjects = [
    [
      "name":"Misdirection",
      "identifier":"MS102"
    ],
    [
      "name":"Knitting",
      "identifier":"DDA201"
    ],
    [
      "name":"Levitation",
      "identifier":"HOP101",
    ]
  ]

  let myStudent = realm.create(Student.self,value:studentDict)


  for dict in subjects {
    let subj = realm.create(Subject.self,value:dict)
    myStudent.subjects.append(subj)
  }


  print("my student is \(myStudent)")

}

我的输出是:

my student is Student {
    identifier = 2;
    name = James;
    university = Stanford;
    subjects = RLMArray <0x7fd4d9d883a0> (
        [0] Subject {
            identifier = MS102;
            name = Misdirection;
        },
        [1] Subject {
            identifier = DDA201;
            name = Knitting;
        },
        [2] Subject {
            identifier = HOP101;
            name = Levitation;
        }
    );
}

请注意,如果 运行 两次,此代码将失败,因为 Realm 不允许您插入两个具有相同 identifier 值的 Students