Ios 泛型返回ask类型的结构

Ios 泛型返回ask类型的结构,ios,generics,swift3,Ios,Generics,Swift3,我有这样一个函数: func someFunction<T: Codable>(x: Double, y: Double, outputClass: T, completionBlock: CompletionBlock) someFunction(x: 12, y: 12, outputClass: Foo.self) { (result) in switch result { case .success(let result): } 我想实现的是,当您调用函数时,

我有这样一个函数:

func someFunction<T: Codable>(x: Double, y: Double, outputClass: T, completionBlock: CompletionBlock)
someFunction(x: 12, y: 12, outputClass: Foo.self) { (result) in
   switch result {
   case .success(let result):
}
我想实现的是,当您调用函数时,例如:

func someFunction<T: Codable>(x: Double, y: Double, outputClass: T, completionBlock: CompletionBlock)
someFunction(x: 12, y: 12, outputClass: Foo.self) { (result) in
   switch result {
   case .success(let result):
}
我在成功案例中的let结果是Foo类型

我有一个Foo结构:

struct Foo: Codable {
    let content: String
}
现在,当我尝试调用函数xCode时,它告诉我:

Argument type 'Foo.Type' does not conform to expected type 'Encodable'
但是结构符合Codable类型,即可编码&可解码


有人能解释一下我做错了什么吗?

我认为需要将函数封装在泛型类中,并将枚举也放在类中。这样,您可以使用类的泛型参数
T
,而不是函数中的
T
。您也不需要
outputType
参数

class SomeClass<T: Codeable> {
    class func someFunction(x: Double, y: Double, completionBlock: CompletionBlock) {

    }

    enum Result {
        case success(T)
        case failure(String?)
    }

    typealias CompletionBlock = (Result) -> Void
}

struct Foo: Codeable {

}

// usage
SomeClass<Foo>.someFunction(x: 0, y: 0) { (x) in
    switch x {
    case .success(let result):
        // result is now of type Foo
    case .failure:
        break
    }
}
class-SomeClass{
类func someFunction(x:Double,y:Double,completionBlock:completionBlock){
}
枚举结果{
成功案例(T)
案例失败(字符串?)
}
typealias CompletionBlock=(结果)->Void
}
结构Foo:可编码{
}
//用法
SomeClass.someFunction(x:0,y:0){(x)in
开关x{
案例。成功(让结果):
//结果现在是Foo类型
案例.失败:
打破
}
}

您传递的是类型的实例,而不是符合
Codable
的对象实例。