Swift:选择扩展中定义的类型特定的方法实现吗?

时间:2018-10-25 21:56:15

标签: swift

问题:

从基本实现中的函数调用时,是否有任何方法可以使Swift选择特定于类型的替代?

上下文:

我正在尝试解决/解决另一个问题(如果协议方法在通用类上,则Swift方法的实现是不可见的),并且我试图通过委派闭包参数来解决该问题

我希望我可以在类型受限的类扩展中使用方法实现,以便为给定泛型类的不同类型提供不同的实现。不过,我看到的是,仅在直接调用方法时才使用扩展实现,而从类中的另一个方法中直接调用方法时才使用。是否可以解决此问题,我可以使用其他任何方法?

class Fubar<T, U> {
    init() {
        doSomething()
        doSomethingDynamic()
    }

    func fromFunction() {
        doSomething()
        doSomethingDynamic()
    }

    func doSomething() {
        print("Base implementation doSomething")
    }

    @objc dynamic func doSomethingDynamic() {
        print("Base implementation doSomethingDynamic")
    }

    @objc dynamic func callDirectly() {
        print("Base implementation of callDirectly")
    }
}

extension Fubar where U == String {
    func doSomething() {
        print("U is a string!")
    }

    func doSomethingDynamic() {
        print("U is a string!")
    }

    func callDirectly() {
        print("U is a String!")
    }
}

let fubar = Fubar<Int, String>()
fubar.callDirectly()
fubar.fromFunction()

我真正得到的是:

Base implementation doSomething
Base implementation doSomethingDynamic
U is a String!
Base implementation doSomething
Base implementation doSomethingDynamic

我希望得到的是

我希望初始化程序将调用扩展中定义的类型特定的替代,而不是通用的基本实现。

谢谢!

0 个答案:

没有答案