Swift,如何传递多种类型的闭包?

标签 swift function closures

func test1(user: String, completion: @escaping (TestModel) -> Void) {
    test2(user: "test", completion: completion as! (Any) -> Void //failed here)
}

func test2(user: String, completion: @escaping (Any) -> Void) {
    completion(user)
}

我想将test1的闭包传递给test2,但是test2的闭包可能有多种类型,运行时出错,EXC_BAD_INSTRUCTION

这样做可以吗?

最佳答案

这是对泛型的误用。如果您不关心使用什么类型作为 completion 的参数,请将其参数键入 Any:

func test(user: String, completion: @escaping (Any) -> Void) {
    completion(user)
}

关于Swift,如何传递多种类型的闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39629789/

相关文章:

ios - 今天小部件应用程序启动是 'over-sensitive'

c# - Azure Functions 中的 ReportViewer : mscorlib: The path is not of a legal form

c++ - 将 void* 转换为 std::function<void()>

javascript - 请解释闭包,或将循环计数器绑定(bind)到函数范围

swift - 可以比较包含 boolean 值的元组。但是官方文件说没有

ios - 无法使用带有 : (Any), 选项的类型参数列表调用 jsonObject:[任何]

ios - Xcode 12.5 与 iOS 14.5.1 设备获取 xcode 无法在设备上启动远程服务 com.apple.debugserver

scala - Foo在Scala中不带参数编译错误?

go - 类似于 Go 中的 lambda 表达式(合并类似的方法)

python - 在 Python 2 中,如何写入父作用域中的变量?