Swift:返回类型不明确的调用重载方法

Swift:返回类型不明确的调用重载方法,swift,overloading,overload-resolution,Swift,Overloading,Overload Resolution,假设我有以下代码: public class A {} public class B : A {} public class Foo { public func bar() -> A { print("secret hidden method") return A() } public func bar() -> B { print("ea

假设我有以下代码:

    public class A {}
    public class B : A {}
    public class Foo {
        public func bar() -> A {
            print("secret hidden method")
            return A()
        }

        public func bar() -> B {
            print("easily accessible method")
            return B()
        }
    }
问题是试图给他们打电话会导致歧义。您可以使用
Foo().bar()作为B
调用
bar()->B
,但所有
Foo().bar()
Foo().bar()作为A
,以及
let A:A=Foo().bar()
都会产生
使用“bar()”的不明确的编译器错误


一句话:如何调用
bar()->A
是否有一些棘手的语法?有必要反思吗?反射足够吗?

编译器需要能够确定要执行的
bar()
的哪个变体。可以明确说明要执行的
func
的类型,并利用curry访问给定实例的正确实现

让foo=foo()
设a:()->a=Foo.bar(Foo)
设b:()->b=Foo.bar(Foo)
()
b()
上述代码将打印:

secret hidden method
easily accessible method

好极了!新的秘密巫术来解决我的问题!:P谢谢!