ios - 异步回调中的递归(Swift)

标签 ios swift

下面是一些代码,它旨在使手机振动(异步),等待此任务完成,然后立即使其再次振动:

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/

相关文章:

ios - UICollectionView 上的手势识别器未接收到手势

iphone - 如何在iPhone中调用Web服务时进行导航?

ios - Swift NSString 检查数字

ios - Swift UITextField 约束 - 在 View 中间添加文本字段

iOS 在应用程序中打开附件。没有这样的文件或目录

ios - 用 Metal 渲染四边形性能

ios - 将现有 Realm 数据库文件复制到应用程序组位置以进行今天的扩展

ios - Xcode 6 配置文件选择

ios - 所有 View Controller 的多维数组

ios - 自定义单元格中的按钮,ViewController 方法