首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的ObservableObject类数组变量'timeStep‘无法保存值

我的ObservableObject类数组变量'timeStep‘无法保存值
EN

Stack Overflow用户
提问于 2021-03-04 22:23:52
回答 2查看 50关注 0票数 1

我有两个ObservableObject类: CarLotData和StopWatchManager。我想要做的是使用我的StopWatchManager类加载CarLotData属性timeStep--这是一个数组双类型。

下面是我的StopWatchManager代码:

代码语言:javascript
复制
import Foundation
import SwiftUI

class StopWatchManager: ObservableObject {
    
@ObservedObject var carLotData = CarLotData()

var timer = Timer()
    
@Published var mode: stopWatchMode = .stopped
@Published var secondsElapsed = 0.0
  
enum stopWatchMode {
case running
case stopped
case paused
}
    
func start() {

            
mode = .running
timer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
self.secondsElapsed = self.secondsElapsed + 0.1
}
        
}
func stop() {
        
          
timer.invalidate()
          
        
if carLotData.timeStep.count < 7 {
carLotData.timeStep.append(secondsElapsed)
print(carLotData.timeStep)
mode = .stopped
           
}
          
          
}
         
}

下面是我的CarLotData代码:

代码语言:javascript
复制
import SwiftUI
import Foundation

class CarLotData: ObservableObject {


@Published var carLotData: Int = 0

@Published var carStep: [Double] = []




var id = UUID()
var newUsed: Int = 0
var powerType: Int = 0
var downPayment: Int = 0
var salesmanType: Int = 0
var appointment: Int = 0
var internet: Int = 0
var retail: Int = 0
var carType: Int = 0
var carBrand:  Int = 0
var purchaseType: Int = 0
var creditRank: Int = 0
var warranty: Int = 0
var service: Int = 0
var thirdParty: Int = 0
var timeStep: [Double] = []
var salesman: Int = 0   
}

最后,这里是我的观点,在这里我得到了"timeStep = []“,其中我想要一个双值数组。

代码语言:javascript
复制
import SwiftUI

struct CarLotDataView: View {

@ObservedObject var carLotData = CarLotData()
@ObservedObject var stopWachManager = StopWatchManager()

var body: some View {
    
    
List {

Group {


Text("Customer ID: \(carLotData.id)")
Text("Salesman: \(carLotData.salesman)")
Text("New/Used: \(carLotData.newUsed)")
Text("Power Type: \(carLotData.powerType)")
Text("Down Payment: \(carLotData.downPayment)")
Text("Salesman Type: \(carLotData.salesmanType)")
Text("Appointment: \(carLotData.appointment)")
}

Group {

Text("Internet: \(carLotData.internet)")
Text("Retail: \(carLotData.retail)")
Text("Car Type: \(carLotData.carType)")
Text("Car Brand: \(carLotData.carBrand)")
Text("Purchase Type: \(carLotData.purchaseType)")
Text("Credit Rankd: \(carLotData.creditRank)")
Text("Warranty: \(carLotData.warranty)")
Text("Service: \(carLotData.service)")
Text("Third Party: \(carLotData.thirdParty)")
Text("Time Steps: \(carLotData.timeStep)" as String)

}

}
    
}
}

其他一切都正常,只是计时器的值没有被传输到我的timeStep数组中。任何见解都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-04 22:33:22

您正在尝试从StopWatchManager访问和更新CarLotData,并且正在使用,但是在您的视图中使用的完全是另一个,您必须使用与您更新的相同的一个!

技巧总是使用您启动的相同的引用!

将这一行添加到CarLotData

代码语言:javascript
复制
static let shared: CarLotData = CarLotData()

然后在StopWatchManager上使用这段代码

代码语言:javascript
复制
let carLotData = CarLotData.shared

不要在类中使用@观察站对象,只需使用let,它就可以完成任务。

最后,在您的视图中使用这个:

代码语言:javascript
复制
@ObservedObject var carLotData = CarLotData.shared

对于我的个人应用程序,我会使用下面的代码:

代码语言:javascript
复制
@StateObject var carLotData = CarLotData.shared
票数 2
EN

Stack Overflow用户

发布于 2021-03-04 22:43:29

您要创建两次CarLotData。正确的方法是确保访问正确的引用。

另一种方法是使CarLotData成为单例。但是,如果您要在多个视图中使用这些数据,这才是正确的方法。

代码语言:javascript
复制
class CarLotData: ObservableObject {
  static public let shared = CarLotData()
  private init() { }
}

那你就会像这样使用它。确保永远不要调用CarLotData()

代码语言:javascript
复制
Text("Internet: \(CarLotData.shared.internet)")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66483944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档