【发布时间】:2020-05-22 20:05:36
【问题描述】:
当我尝试在 Timer 函数中更改累计时间的值时,累计时间的值保持不变。
import UIKit
class WelcomeViewController: UIViewController {
@IBOutlet weak var titleLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
titleLabel.text = ""
var accumulatedTime = 0.0
let logo = "Hello World"
for letter in logo {
Timer.scheduledTimer(withTimeInterval: accumulatedTime*0.1, repeats: false) { (timer) in
self.titleLabel.text?.append(letter)
accumulatedTime += 1 // increase the value of variable inside block function
}
print(accumulatedTime)
}
}
}
// Output is 0.0, 0.0, 0.0, 0.0, 0.0, 0.0...
但是如果我把“accumulatedTime += 1”移到Timer.scheduledTimer的block函数外面,就可以再次改变accumulatedTime的值了。
import UIKit
class WelcomeViewController: UIViewController {
@IBOutlet weak var titleLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
titleLabel.text = ""
var accumulatedTime = 0.0
let logo = "Hello World"
for letter in logo {
Timer.scheduledTimer(withTimeInterval: accumulatedTime*0.1, repeats: false) { (timer) in
self.titleLabel.text?.append(letter)
}
accumulatedTime += 1 // increase the value of variable outside block function
print(accumulatedTime)
}
}
}
// Output is 1.0, 2.0, 3.0, 4.0, 5.0...
我很好奇为什么我不能在 Timer.scheduledTimer 的块函数中改变局部变量的值,你们能帮我理解这个内部逻辑吗..谢谢
【问题讨论】:
标签: ios swift xcode iphone-developer-program