【问题标题】:Swift: call overloaded method with ambiguous return typeSwift:调用返回类型不明确的重载方法
【发布时间】:2020-02-06 01:47:24
【问题描述】:

假设我有以下代码:

    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 它有一些棘手的语法吗?是否需要反思?反射足够吗?

【问题讨论】:

    标签: swift overloading overload-resolution


    【解决方案1】:

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

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

    上面的代码会打印出来:

    secret hidden method
    easily accessible method
    

    【讨论】:

    • 哇,完美!新的秘密巫毒来解决我的问题! :P 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多