【问题标题】:Swift 4 trying to use Realm Database Object as an instance variableSwift 4 尝试使用领域数据库对象作为实例变量
【发布时间】:2018-10-11 00:08:13
【问题描述】:

我来自 java 编程背景。我试图像这样从classB设置我的classA的实例变量,以便对进入Realm并用于使用RXSwift与蓝牙通信的其他变量进行计算,所以我试图从对象类型Measurement转换为TestRes。

public class classA {

    var mTestResult:TestRes?

    func setTestResult(measurement:Measurement){
        self.mTestResult?.id = measurement.measurementId
        print("Test Id:     \(self.mTestResult?.id)")
        print("Measured Id: \(measurement.measurementId)")

        self.mTestResult?.oilType = measurement.oilType
        print("Test Oil Type:     \(self.mTestResult?.oilType)")
        print("Measured Oil Type: \(measurement.oilType)")
    }

}

ClassB的功能如下:

public class ClassB{

    private func send304and306(measurement: Measurement, connectedPeripheral: Peripheral) -> Observable<Measurement> {

        let response2 = MeasurementData(response: response)     
        //added            
        dump(measurement)
        let results = HW2_1_Calculate()
        results.setTestResult(measurement: measurement)

        results.run()//CRASH HERE because my measurements are not being set

        realm.add(results.mTestResult, update: true)
        print("about to dump results")
        dump(results)
        try realm.commitWrite()
    }
}

我在调试器中得到的输出是

测试 ID:无
实测 ID:13fvasl-f4vr-4fsb-4kgv-4kvlvnfsv
测试油类型:无
测量油类型:

我的 TestRes 类型的实例变量进入领域数据库,看起来像这样。

class TestRes: Object {
    @objc dynamic var id:String = ""
    @objc dynamic var oilType:String = ""
}

class Measurement: Object {
    @objc dynamic var measurementId = UUID().uuidString
    @objc dynamic var oilType: String = ""    
}

实际上,TestRes 比 Measurement 更复杂。无论如何,为什么 ClassA 实例 var 没有设置为我告诉它等于的值?

【问题讨论】:

  • 我看不到您在哪里实例化 mTestResult。这是一个可选值(即初始化为 nil)。
  • 注明。我也会改变它。谢谢你的提示!

标签: swift set realm


【解决方案1】:

我当然在发布后就想出了如何解决这个问题..

反正我没有使用 init() 来构造对象! 为了解决我的问题,我把它放在 ClassA 中

init(measurement:Measurement){
    self.mTestResult = setTestResult(measurement: measurement)
    print("Test Id:     \(self.mTestResult?.id)")
}

然后在 ClassB 中,我使用该构造函数创建了对象,如下所示。

let results = HW2_1_Calculate(measurement:measurement)

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多