【发布时间】:2022-08-21 17:57:41
【问题描述】:
我的应用程序需要通过 Siri 快捷方式意图连接并写入蓝牙设备。一旦调用 IntentHandling 类中的完成处理程序,连接过程就会终止。
蓝牙处理包含在一个名为 BTHandler 的单例中。写入响应由 BTHandler 调用的委托函数确认。这是委托函数的代码和处理意图的简化函数:
var writeCompleted = false
//delegate function
func writeConfirmed() {
writeCompleted = true
}
func handle(intent: SwitchIntent, completion: @escaping (SwitchIntentResponse) -> Void) {
BTHandler.shared.responseDelegate = self
BTHandler.shared.scan {
BTHandler.shared.centralManager.stopScan()
BTHandler.shared.write(btdevice: BTHandler.shared.discoveredDevice, command: .write)
completion(SwitchIntentResponse(code: .success, userActivity: nil))
}
}
只有当 writeCompleted 为真时,才有办法调用完成?
-
您的问题的标题和正文不匹配。 \"只有当 writeCompleted 为真时,是否有方法调用完成?\" 当然,
if writeCompleted { completion(...) }。 \"基于外部布尔值转义闭包?\" 这是不可能的,因为@escaping是一种修改调用者如何将闭包传递给您的函数的效果。如果它可以转义,则它有一组需要强制执行的规则,并且通常需要将更多的东西移动到堆中。它不知道是否真的发生了逃逸,所以它总是需要表现得好像它是可能的一样 -
将
guard self.writeCompleted else { return }作为完成处理程序的第一行怎么样?当然在所有情况下都会调用它,但它不会做任何事情
标签: swift closures shortcut siri