【问题标题】:Syntax to create a Realm List创建领域列表的语法
【发布时间】:2015-10-23 19:11:35
【问题描述】:

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

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(myStudent)

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

【问题讨论】:

    标签: ios database list swift2 realm


    【解决方案1】:

    我认为您需要先用一个字典创建Student,然后将Subjects 一个一个地创建为具有单独字典的领域对象,然后将它们添加到父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

    【讨论】:

    • 完美!我喜欢你的“悬浮 - HOP101”!
    【解决方案2】:

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

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

    【讨论】:

    • 我在尝试 Ryniere 时遇到了缺少密钥的错误。
    • 我只是想知道是否可以在列表中使用标识符。我希望如此,我想我需要一个标识符。
    • 不确定它是 Swift 2.0 - 我正在使用它,我收到了 Terminating app due to uncaught exception 'RLMException', reason: 'Invalid value 'Engineering' to initialize object of type 'Subject': missing key 'identifier''
    猜你喜欢
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2019-01-05
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多