首页 > 解决方案 > 如何将函数的参数转换为作为方法参数给出的函数中的 Any?

问题描述

如何将函数的参数转换为作为方法参数给出的函数中的 Any?

struct InitializationStaticData: Decodable {}

func method1(responseListener: @escaping (_ status:Int, _ data: InitializationStaticData?) -> Void)
{
    let dsa = responseListener as! (Int, Any?) -> Void // EXC_BREAKPOINT
    let asd = responseListener as! (Int, Decodable?) -> Void // EXC_BREAKPOINT
    method2(responseListener: sdd)
}

我试着像这样投射它:

func method2<T>(responseListener: @escaping (_ status: Int, _ data: Any?) -> Void)
{
}

标签: iosswiftfunctioncasting

解决方案


基本上通用方法是正确的。

更改datato的类型T并将泛型约束为Decodable

func method2<T : Decodable>(responseListener: @escaping (Int, T) -> Void)
{
}

下划线字符和参数标签是 Swift 2 遗留的,它们在 Swift 3+ 中未使用


推荐阅读