Swift泛型错误:无法将"Type <T>"类型的值转换为预期的参数类型"Type <_>"

And*_*eev 7 generics swift

请考虑以下设置:

protocol MyProcotol {
}

class MyModel: MyProcotol {
}

enum Result<T> {
    case success(value: T)
    case failure
}

class Test {
    func test<T: MyProcotol>(completion: (Result<T>) -> Void) {
        let model = MyModel()
        let result = Result.success(value: model)
        completion(result)
    }
}
Run Code Online (Sandbox Code Playgroud)

我为什么不打电话completion(result)?我收到这个错误:

无法将"结果"类型的值转换为预期的参数类型"结果<_>"

任何解决方法?

vad*_*ian 9

MyModel在泛型函数中使用了非泛型的具体类型,这是行不通的。

你可以做这样的事情

class Test {
    func test<T: MyProcotol>(item: T, completion: (Result<T>) -> Void) {
        let result : Result<T> = .success(value: item)
        completion(result)
    }
}
Run Code Online (Sandbox Code Playgroud)