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
这样做可以通过吗?
答案 0 :(得分:1)
这是对通用的滥用。如果您不关心将哪个类型用作completion
的参数,请将其参数键入为Any:
func test(user: String, completion: @escaping (Any) -> Void) {
completion(user)
}
答案 1 :(得分:1)
completion
必须采用T
类型的参数。因此,您用作completion
的参数的任何内容也必须属于T
类型。因此user
必须是T
类型,即
func test<T>(user: T, completion: @escaping (T) -> Void)
{
completion(user)
}