gpt4 book ai didi

swift - 检查 Swift 闭包中的某些语句

转载 作者:行者123 更新时间:2023-11-28 05:54:27 25 4
gpt4 key购买 nike

我写了一个将闭包作为参数的函数,如下所示:

func doSome(work: () -> Void = { print("sleeping...") } ) {
work()
}

现在我想调查完成的工作。因此我想检查给定的闭包是否包含任何打印语句。

有点像这样:

func doSome(work: () -> Void = { print("doing hard work...") } ) {
work()

if work.contains(print) {
print("we did some hard work there and printed something!")
}
}

我怎样才能做到这一点?


编辑:我想要实现的目标

异步函数尝试连接到 http 服务器 - 我们称它为 connect。它以一个闭包作为参数——称为 finally。顾名思义:闭包在连接尝试后执行。

如果连接尝试成功(http 响应代码 == 200),我需要调用另一个函数一次 - 让我们这样调用它:一次

connect 函数因此看起来像这样:

func connect(finally: () -> Void = {}) {
httpRepsonse = asyncRequestToServer()

if httpResponse.statusCode == 200 {
once()
}

// and finally:
finally()
}

其他函数调用 connect 并传递他们需要的语句,以便 connect 函数执行 finally

问题来了:有一个函数每次都需要once执行,因此它在finally闭包中传递了它。如果现在连接成功,once 会被调用两次。

这就是为什么我想检查给定的闭包是否已经包含 once 调用,这样我就可以避免调用它两次。

最佳答案

据我所知,查询闭包的内容并不容易。

您可以使用一个或多个 bool 参数来解决(当然取决于您的需要和实现),如果相关的话,您将在调用函数时分配这些参数。

例如:

func doSome(work: () -> Void = { print("doing hard work...")}, containsPrint: Bool = false) {

// Call your work closure
work()

// Check conditions
if containsPrint {
print("We printed some stuff")
}
}

我知道这是一个相当简单的解决方案,但它可能会提供所需的功能。

关于swift - 检查 Swift 闭包中的某些语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51882948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com