【问题标题】:How to get RealmSwift working with Xcode 11?如何让 RealmSwift 与 Xcode 11 一起工作?
【发布时间】:2020-01-07 14:19:58
【问题描述】:

我一直在尝试开始使用 Realm(4.3.0 版)作为 Xcode 11 的数据库选项。凭借我的谷歌搜索技能,我无法找到问题的答案。我尝试使用Official Realm documentation,但似乎他们做事的方式不适用于 Xcode 11。基本代码:

import UIKit
import RealmSwift

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    class Test: Object {
        @objc dynamic var text = ""
        @objc dynamic var internalId = 0
    }

    let newTest = Test()
    newTest.text = "Text" // Errors happen here



    print("text: \(newTest.text)")

}

我收到了一个我绝对没有预料到的错误:

  • 一行中的连续声明必须用';'分隔
  • 函数声明的参数列表中应为 '('
  • 函数声明体中应为“{”
  • 实例方法声明中应包含“func”关键字
  • 预期声明
  • “newTest()”的重新声明无效

当我尝试初始化并写入 Realm 时:

let realm = try! Realm()

try! realm.write { // Error here
   realm.add(newTest)
}

我收到“预期声明”的错误

根据我的阅读,Realm 似乎是一个非常适合 iOS 的数据库选项,但是由于这些问题,我无法启动和运行。任何帮助将不胜感激。

【问题讨论】:

  • 您正在创建类级别的实例。将所有三行(创建、修改和打印)放在 viewDidLoad() 方法中。除此之外,将您的测试类移到 ViewController 之外,最好放在它自己的文件中。
  • @108g 成功了!万分感谢!仍然很难弄清楚所有东西都需要在 Swift 中的什么位置。

标签: ios swift xcode realm


【解决方案1】:

让我们重新排列代码,以便将对象和函数放在正确的位置。

import UIKit
import RealmSwift

//this makes the class available throughout the app
class Test: Object {
   @objc dynamic var text = ""
   @objc dynamic var internalId = 0
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()


       //create a new realm object in memory
       let newTest = Test()
       newTest.text = "Text"

       print("text: \(newTest.text)")

       //persist the object to realm
       let realm = try! Realm()
       try! realm.write {
          realm.add(newTest)
       }

       //or read objects
       let results = realm.objects(Test.self)
       for object in results {
          print(object.text)
       }

    }
}

【讨论】:

    【解决方案2】:

    喜欢@108g 评论: 我试图在类级别创建一个实例。所以我在 viewDidLoad() 方法中移动了创建、修改和打印。然后我将我的 Test 类移动到一个新文件中。

    所以有效的代码: ViewController.swift

    import UIKit
    import RealmSwift
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
    
            let newTest = Prompt()
            newTest.text = "Text"
    
            print("text: \(newTest.text)")
    
    
            let realm = try! Realm()
    
            try! realm.write {
                realm.add(newTest)
            }
        }
    }
    

    还有 RealmTest.swift(新文件)

    import Foundation
    import RealmSwift
    
    class Prompt: Object {
        @objc dynamic var text = ""
        @objc dynamic var internalId = 0
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-02
      • 2017-05-09
      • 2020-03-11
      • 1970-01-01
      • 2017-06-25
      • 2020-12-13
      • 2012-02-02
      • 2011-02-22
      相关资源
      最近更新 更多