如何将 inout 变量与其他源定义的闭包一起使用?



我对 Swift 比较陌生,想知道我如何才能做到这一点。

我有一个 Swift 进程,我想在完成时切换一个标志,我有以下代码:

task.terminationHandler = { process in
isTaskComplete.toggle()
}

我在各种视图中复制了此确切代码,并尝试将其转换为函数,我第一次尝试使用inout引用isTaskComplete标志。

但是,由于terminationHandler本身定义了它所采用的闭包参数,因此我无法附加辅助inout参数。我想知道是否有任何方法可以引用关闭中的标志并引用值?

对于使用 Swift 5 和 Xcode 11.5 的价值。

任何帮助将不胜感激!谢谢:)

您可以使用protocolsprotocol 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()
}
}

最新更新