在运行时注入混凝土类型



是否完全可以在运行时注入混凝土类型。例如,假设您有两个具有相同方法具有不同实现的框架:

FrameworkA
func name() -> String {
  return "A"
}
FrameworkB
func name() -> String {
  return "B"
}

因此您在Frameworkc中创建一个协议

FrameworkC
protocol Namable {
  func name() -> String
}
class SomeOtherClass {
    // uses Namable
}

然后在使用Frameworkc的实际应用中,您可以嵌入或链接frameworka,然后将使用Frameworka的实现?同样,其他一些Frameworkc消费者可以使用Frameworkb的实现?

我做了类似的事情,但对frameworks per-se却没有。想象一下,您有一个应用程序,并且需要另一个应用程序,其中包含第一个应用程序的所有代码以及该代码功能的一些"调整"。您想最大程度地减少第一个(基本(应用程序库中必须更改的内容。(即,我不想以多种不受欢迎的方式迅速结束基本代码。(

(

我实际上已经成功写了&发货了几个iOS应用程序"在"另一个iOS应用程序(彼此之间的应用程序只是一组调整代码以及基础应用程序的代码。基本应用程序的代码仅需调用一些在基本应用中无用的额外方法 - 符合符合方法的方法对于特定的协议。基本应用没有重大更改,但是它的代码库是由另一个应用程序(实际上是几个(在该代码库中进行了调整和扩展的。

通过使用协议扩展和where子句来定位实现协议的特定具体类,您可以通过将额外的代码文件添加到(第二(应用。这可能是一种非常有力的方法,可以扩展代码库的基本功能,而无需重新构造或重新安装基本代码。

因此,尝试使用框架A和B都使用" Where"子句扩展了您的可命令协议,以定位一个具体的框架C.和Framework C可能具有相同的扩展名,只需使用空的NO-OP方法。因此,框架A或B基本上可以为框架C的"空协议"方法提供可插入的实现,而框架C c对A和B一无所知。您基本上可以针对此中特定类的特定方法方式,仅通过链接的其他代码(扩展协议与Where子句(链接的其他代码替换其内容。

这是Swift,Imho最奇迹的事情之一。

最新更新