Swift泛型方法应该使用重载泛型函数(Swift generic method should use overloaded generic function)
我无法使用Swift泛型获得所需的效果。 我定义了一些通用函数,但是对于特定情况,我想覆盖它们以提供其他功能。 当我从非泛型方法/函数调用函数时,一切正常(它在参数类型匹配时使用特定版本,否则使用泛型版本),但是当我从泛型方法/函数调用函数时,它总是使用泛型功能的版本(从不具体版本)。
这是一个示例游乐场:
func printSomething <T> (something: T) { println("This is using the generic version.") println(something) } func printSomething(string: String) { println("This is using the specific version.") println(string) } func printSomeMoreThings <T> (something: T) { printSomething(something) } class TestClass <T> { var something: T init(something: T) { self.something = something } func printIt() { printSomething(self.something) } } printSomething("a") println() printSomeMoreThings("b") let test = TestClass(something: "c") println() test.printIt()
这给出了以下输出:
This is using the specific version. a This is using the generic version. b This is using the generic version. c
我希望它一直使用特定的版本(因为它一直使用String参数调用printSomething)。 有没有办法在不使用特定String版本重载每个方法/函数的情况下执行此操作。 特别是对于Class的情况,因为我不能为特定类型的T重载类方法?
I'm having trouble getting the desired effect with Swift generics. I defined some generic functions, but for specific cases I would like to override them to provide additional features. When I call the functions from a non generic method/function everything works fine (it uses the specific versions when the argument types match and the generic version otherwise), but when I call the functions from a generic method/function it always uses the generic version of the function (never the specific versions).
Here's an example playground:
func printSomething <T> (something: T) { println("This is using the generic version.") println(something) } func printSomething(string: String) { println("This is using the specific version.") println(string) } func printSomeMoreThings <T> (something: T) { printSomething(something) } class TestClass <T> { var something: T init(something: T) { self.something = something } func printIt() { printSomething(self.something) } } printSomething("a") println() printSomeMoreThings("b") let test = TestClass(something: "c") println() test.printIt()
This gives the following output:
This is using the specific version. a This is using the generic version. b This is using the generic version. c
I would like it to use the specific version all the time (since it's calling printSomething with a String argument all the time). Is there a way to do this without overloading every method/function with a specific String version. Especially for the Class case, because I can't overload the class methods for specific types of T?
原文:https://stackoverflow.com/questions/29717698