下面是一些代码,它旨在使手机振动(异步),等待此任务完成,然后立即使其再次振动:
func vibrate() {
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
AudioServicesAddSystemSoundCompletion(SystemSoundID(kSystemSoundID_Vibrate), nil, nil, { (soundId, clientData) -> Void in
self.vibrate()
}, nil)
}
Xcode 给出以下错误:
A C function pointer cannot be formed from a closure that captures context
如何从这个异步函数内部递归?
最佳答案
我正在努力寻找您问题的解决方案,我偶然发现了这个线程:https://forums.swift.org/t/a-c-function-pointer-cannot-be-formed-from-a-local-function-that-captures-context-on-swift-package/9388/6
我确实将 vibrate()
方法封装到一个新的结构中,如下所示:
import AudioToolbox
import CoreAudioKit
struct Vibrator {
static func vibrate() {
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
AudioServicesAddSystemSoundCompletion(SystemSoundID(kSystemSoundID_Vibrate), nil, nil, { (soundId, clientData) in
Vibrator.vibrate()
}, nil)
}
}
当然可以这样调用它:Vibrator.vibrate()
。瞧!
希望对您有所帮助!
关于ios - 异步回调中的递归(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52827593/