【问题标题】:How to pass main app class to a framework如何将主应用程序类传递给框架
【发布时间】:2019-09-04 17:14:42
【问题描述】:

我最近在我的项目中添加了框架,它工作正常,但是我的应用程序中存在我需要传递给框架的实现。我不确定这是否可能,如果可能的话,我想就如何实现这一目标提出建议。

预期的结果是将主应用程序类的实例添加到框架中,这样我就可以在框架中使用主应用程序中的功能。

Scuedo 代码:

在框架中创建协议:

public protocol FrameworkBridge: class {
    func tapOnClaimToken()
}

在主应用程序中创建一个确认框架协议的类:

 class FrameworkBridgeImplementation: FrameworkBridge {
    func tapOnClaimToken() {
        // call some code which only exists in the main app
    }
}

框架中的另一个类:

 class  AnotherClassIntheFramework {

    var frameworkBridge: FrameworkBridge?

    func performAction {
        frameworkBridge.tapOnClaimToken()
    }
}

【问题讨论】:

  • 什么是“主应用程序类”?如果您指的是 AppDelegate,那么您几乎可以肯定不应该将其传递给任何东西(应用程序委托的工作是为 UIApplication 提供委托方法,而不是成为全局状态的垃圾场)。但无论如何,答案都是“在框架中创建一个协议,并将符合该协议的对象传递给框架”。详细情况将取决于您的具体情况。
  • 主应用程序类是指应用程序中的任何类而不是 appdelegate
  • 听起来是一个非常糟糕的方法。 “框架”如何知道您正在传递的类中有哪些功能?您可能应该编辑您的问题以准确解释您要完成的工作 - 具体而言,而不是“获取一些未描述的框架以使用一些未描述的功能”
  • 您编辑的代码看起来完全正确。我假设在你的应用程序代码的某个地方你有anotherClassInTheFramework.frameworkBridge = self 或类似的东西。看起来你已经完成了。这里有问题吗?

标签: ios swift frameworks


【解决方案1】:

要将对象传递给框架,框架通常应该定义一些它所期望的协议。然后将您的主要应用程序类型与它一致,并将其传递给框架。

如果所讨论的实现只是单个函数,则将函数本身作为参数传递通常更容易更好。

这种模式很常见;这正是您能够将自定义 UITableViewDelegate 实现传递给 UIKit 并允许 UIKit 调用您的方法的方式。

【讨论】:

  • 我已经添加了 scuedo 代码,以尽我对您的回答的理解,但我不知道如何继续
猜你喜欢
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
相关资源
最近更新 更多