Swift: 调用具有不明确 return 类型的重载方法

Swift: call overloaded method with ambiguous return type

假设我有以下代码:

    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() as B 调用 bar() -> B,但所有 Foo().bar()Foo().bar() as Alet a: A = Foo().bar() 都会产生 Ambiguous use of 'bar()' 编译器错误。

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

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

let foo = Foo()
let a: ()->A = Foo.bar(foo)
let b: ()->B = Foo.bar(foo)
a()
b()

以上代码将打印:

secret hidden method
easily accessible method