我试图让我的问题非常简单。我一整天都在努力工作,但没有运气。我有两个协议。可解码和可请求。相关类型和泛型调用错误函数的Swift协议
protocol Decodable { }
struct D: Decodable { }
protocol Requestable {
associatedtype Model
}
extension Requestable {
func returnValue() {
Utils.doSomething(Model)
}
}
和A类的Utils
class Utils {
static func doSomething<T>(param: T) {
print("Default")
}
static func doSomething<T: Decodable>(param: T) {
print("Decodable")
}
static func doSomething<T: Decodable>(param: [T]) {
print("Decodable Array")
}
}
创建一个structř实现可请求并赋予类型别名模型字符串
struct R: Requestable {
typealias Model = String
}
当运行R()。的returnValue( )功能,它打印Default
。如预期。
创建一个struct R2实现可请求并赋予类型别名模型d:当运行R2()。的returnValue()函数,其可解码实施
struct R2: Requestable {
typealias Model = D
}
,它打印Default
。但我期待它会打印Decodable
,因为型号D
符合Decodable
。
创建一个struct R3实现可请求并赋予类型别名模型[d]其中数组的元素正在执行可解码
struct R3: Requestable {
typealias Model = [D]
}
当运行R3()。的returnValue()函数,它打印Default
。但我期待它会打印Decodable Array
,因为型号D
符合Decodable
。
任何形式的帮助表示赞赏。
UPDATE
使用AnyRequestable和因为在现实的代码一般是返回值,不能动态地检查在运行时检查不会在这种情况下工作。
在实际的代码功能签名就像
public static func ResponseSerializer<M>() -> ResponseSerializer<M, NSError> {}
public static func ResponseSerializer<M: Decodable>() -> ResponseSerializer<M, NSError> {}
public static func ResponseSerializer<M: Decodable>() -> ResponseSerializer<[M], NSError> {}
我的坏。我还添加了一个正常的情况。而且该模型也可以[可解码]。 –
感谢您的帮助。我在这里得到了同样的答复。 http://stackoverflow.com/questions/35431712/generic-method-override-not-working-in-swift。但是没有办法检查运行时间。自从这么多天以来,我一直在挣扎。 –
@RahulKatariya:你,我的朋友,很幸运。因为我发明了你需要解决的问题。见面[OpaqueSwift](https://github.com/vmanot/OpaqueSwift)。 –