swift - 如何将 inout 变量与其他来源定义的闭包一起使用?
问题描述
我对 Swift 比较陌生,想知道如何才能做到这一点。
我有一个 Swift 进程,我想在完成时切换一个标志,我有以下代码:
task.terminationHandler = { process in
isTaskComplete.toggle()
}
我在各种视图中复制了这个确切的代码,并试图将其转换为函数,我第一次尝试isTaskComplete
使用inout
.
但是,因为terminationHandler
它本身定义了它所采用的闭包的参数,所以我没有办法附加一个辅助inout
参数。我想知道是否有任何方法可以让我引用闭包内的标志并引用该值?
对于使用 Swift 5 和 Xcode 11.5 的价值。
任何帮助将不胜感激!谢谢 :)
解决方案
你可以使用protocols
and protocol extensions
。
protocol NameYourProtocol {
var task: TypeOfTask { get } // { get set } If you need
var isTaskComplete: Bool { get }
}
extension NameYourProtocol {
func handleTermination() {
task.terminationHandler = { process in
isTaskComplete.toggle()
}
}
}
这就是你在需要调用它的每一堂课中要做的:
class Worker: NameYourProtocol {
// This will be required by protocol.
var task = TypeOfTask()
var isTaskComplete = false
init() {
// Call `handleTermination` where you need to.
handleTermination()
}
}
推荐阅读
- python - 如何处理自定义 NoneType 错误?
- ionic-framework - Capacitor 无法在 android 设备上全屏显示 SplashScreen,它在 IOS 设备上完美运行
- r - 使用 dplyr 从数据帧 (r) 中的值呈现列表
- node.js - 使用 WSL 为 Raspi (ARM) 构建 sqlite3
- python-3.x - 如何解决UnicodeEncodeError:'ascii',同时处理pandas列,同时将列转换为str datattype?
- python - 使用 AWS amplify 和 python lambda 函数使用 get 方法创建 rest api
- visual-studio-code - 如何在 VS Code 中将 gcc 工具链升级到 10
- excel - 范围类的VBA自动过滤方法失败
- spring-boot - maven:替换传递依赖版本
- python - 如何使用 Python pandas 在 csv 文件中将数据插入 15 分钟的时间间隔?