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
的对象实例。