gpt4 book ai didi

ios - Swift - dispatch_after 的替代品

转载 作者:可可西里 更新时间:2023-11-01 02:18:52 32 4
gpt4 key购买 nike

这里是 Swift/SO 新手 - 会尽量说清楚!

我有一个 @IBActionwkinterfacepicker 调用。这会调用一个函数,该函数可能会再次更改选择器 - 这反过来会导致 @IBAction 再次被触发,因此可能会导致不需要的循环类型行为。

我想做的是将控制权传递给第二个函数,而不是调用/返回 @IBAction 功能。我有一个使用 dispatch_after 的可行解决方案,它实现了任意延迟,以便 @IBAction 在第二个函数开始之前完成,但这看起来不是很优雅/合适。

大致如下所示:

@IBAction func freePickerChanged(value: Int) {
selectedValue = value

let triggerTime = (Int64(NSEC_PER_SEC) * 1)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, triggerTime), dispatch_get_main_queue(), { () -> Void in
self.changeValues()
})
// Without using dispatch_after, program control returns here from changeValues(), causing loop
}

//Ideally would call changeValues() here, after @IBAction exits

func changeValues() {
//Do some calculations here. Perhaps the picker needs to be changed again using setSelectedItemIndex - @IBACTION KICKED OFF AGAIN
}

有没有更好的方法在 @IBAction 函数退出时将控制权传递给第二个函数?或者我完全走错了路?

提前感谢您抽出宝贵时间查看此内容!

最佳答案

与其选择一个随机延迟来运行您的代码,另一种方法是将您的代码块异步放入主队列。这将在当前运行循环完成后运行,因此您不必计算要等待多长时间。

即代替

dispatch_after(...

尝试

dispatch_async(dispatch_get_main_queue()) {
// your code here
}

关于ios - Swift - dispatch_after 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33039678/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com