我有 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:13fvasl-f4vr-4fsb-4kgv-4kvlvnfsv
测试油类型:无
被测油品类型:
我的 TestRes 类型的实例变量进入 Realm 数据库,看起来像这样。
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 实例变量没有设置为我告诉它等于的值?
最佳答案
当然,我在发布后就想出了如何解决这个问题..
反正我没有使用 init() 来构造对象! 为了解决我的问题,我把它放在 A 类中
init(measurement:Measurement){
self.mTestResult = setTestResult(measurement: measurement)
print("Test Id: \(self.mTestResult?.id)")
}
然后在 ClassB 中,我使用该构造函数创建了对象,如下所示。
let results = HW2_1_Calculate(measurement:measurement)
关于Swift 4 尝试使用 Realm 数据库对象作为实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50108252/