self.pedometer.startUpdates (from: midnightOfToday, withHandler: { pedometerData, error in
guard error == nil else {
print(error!)
return
}
//获取各个数据
if let numberOfSteps = pedometerData?.numberOfSteps {
self.steps = numberOfSteps.intValue
}
//在线程中更新文本框数据
DispatchQueue.main.async{
print(self.steps)
}
})
print(self.steps) }
新手学习,为什么以上代码两个print的输出不相同?如何在withhandler这个闭包内赋值给外部变量?
你的withHandler 应该会不停的触发,而你两个print,一个是在主线程,一个是在当前的回调,这两个之间本来就不是同步的
self.steps = numberOfSteps.intValue
这里获取值后,是异步的 ,然后 print(self.steps)这里打印的时候,DispatchQueue.main.async这里面的已经可能发生变化了