This guy说可以重载Swift泛型方法作为专门化它们的方法:
func testMethod<T: Comparable>(v: T) -> T {
return v
}
func testMethod(v: Int) -> Int {
return v * 12345
}
所以我试图得到一些类似的东西。我已经创建了一个类来从字节缓冲区读取整数。它特别定义了这些方法:
public func read(type: Int32.Type) -> Int32 {
return /* implementation detail */
}
public func read<T: IntegerType>(type: T.Type) -> T {
let bug: T! = nil
return bug
}
public func readInto<T: IntegerType>(inout into: T) {
into = read(T.self)
}
还有更多read(type: [U]Int[bits])
方法来重载read<T>
方法。如果我尝试从非泛型实现未涵盖的类型中读取,则泛型方法意味着崩溃我的程序。
readInto
方法是一种方便的方法,因此我不必重复对象的类型。如果我想要读取Int32
变量,而不是variable = reader.read(type: Int32.self)
,我可以reader.read(&variable)
,因为我不想重复自己,我觉得这样更好。
我的问题是来自readInto
的来电系统地转到了全能read<T>
,即使存在更精确的过载。
有没有办法让它从泛型方法调用最精确的重载?
答案 0 :(得分:1)
这不能解决一般问题,但Swift函数可以从返回类型中重载。例如:
func foo() -> Int16 {
return 0
}
func foo() -> Int32 {
return 1
}
let i16: Int16 = foo() // 0
let i32: Int32 = foo() // 1
let i = foo() // compile-time error: ambiguous
这实际上意味着我不需要readInto
方法来读取给定类型的变量,我可以为其分配read()
调用的结果并完成有了它,该死的是泛型。