在计时器驱动的函数中更新变量

时间:2018-07-28 15:32:02

标签: ios swift

我具有以下功能,当切换按钮将其激活时,该功能可以正常工作。我想添加一个变量,为每个消息提供从1开始的当前消息编号。我尝试了各种设置/更新值的方法,但是这些方法都无法帮助更新。

我对Swift / iOS开发非常陌生,因此我确定我缺少一些东西。我所知道的是,该消息会反复打印到控制台上,直到关闭按钮为止,Timer才能使其连续运行。

@IBOutlet weak var stateLabel: UILabel!
//Starts / Stops recording of sensor data via a switch
@IBAction func stateChange(_ sender: UISwitch) {
    if sender.isOn == true {
        startSensorData()
        stateLabel.text = "Stop"
    } else {
        stopSensorData()
        stateLabel.text = "Start"
    }
}


func startSensorData() {
    print("Start Capturing Sensor Data")
    // Making sure sensors are available
    if self.motionManager.isAccelerometerAvailable, self.motionManager.isGyroAvailable {

        // Setting the frequency required for data session
        self.motionManager.accelerometerUpdateInterval = 1.0 / 3.0
        self.motionManager.gyroUpdateInterval = 1.0 / 3.0

        // Start sensor updates
        self.motionManager.startAccelerometerUpdates()
        self.motionManager.startGyroUpdates()

        // Configure a timer to fetch the data.
        self.motionUpdateTimer = Timer.scheduledTimer(withTimeInterval: 1.0/3.0, repeats: true, block: { (timer1) in
            // Get the motion data.
            var loggingSample = 1
            if let accelData = self.motionManager.accelerometerData, let gyroData = self.motionManager.gyroData {

                let accelX = accelData.acceleration.x
                let accelY = accelData.acceleration.y
                let accelZ = accelData.acceleration.z

                let gyroX = gyroData.rotationRate.x
                let gyroY = gyroData.rotationRate.y
                let gyroZ = gyroData.rotationRate.z

                let message = "\(Date().timeIntervalSince1970),\(self.device_id),\(loggingSample),\(accelX),\(accelY),\(accelZ),\(gyroX),\(gyroY),\(gyroZ),Processing"
                print(message)
                loggingSample += 1
            }
        }
    )}
}

1 个答案:

答案 0 :(得分:1)

您不断获得1的{​​{1}}值,因为您使用的是每次创建为loggingSample的局部变量。

您需要做的就是将1的声明移到函数外部,使其成为类属性。

移动行:

loggingSample

该功能之外,因此它位于您的店铺和其他属性旁边。