为什么我的代码只能在DispatchQueue.main.async块中运行?

时间:2017-01-17 16:10:44

标签: ios swift swift3

我编写此代码以在用户开始编辑UITextField时选择所有文字:

@IBAction func onEditingBegin(_ sender: Any) {
    print("editing began")
    let textfield = sender as! UITextField
    textfield.selectAll(nil)
}

但是只有在textfield.selectAll(nil)块中包含DispatchQueue.main.async行后才能生效:

DispatchQueue.main.async {
    textfield.selectAll(nil)
}

为什么?

更新

我在onEditingBegin()中打印出了帖子的名称,这就是结果:

<NSThread: 0x60800006c880>{number = 1, name = main}

所以它似乎已经在主线程上被触发了,但是除非在textfield.selectAll()块内部调用DispatchQueue.main.async,否则代码仍然无效。

1 个答案:

答案 0 :(得分:0)

'导致所有UI修改仅在主线程中发生......

如果您在其他线程中更改UI,则结果是不可预测的:它可能永远不会发生或稍后显示。