“'shared'不可用:在适当的情况下使用基于视图控制器的解决方案”在App Extension

时间:2018-03-19 11:32:52

标签: ios swift ios-app-extension

我有一个进行网络通话的课程。我希望能够在主应用程序和App扩展中使用此类。但是,在本课程中,我使用:UIApplication.shared.isNetworkActivityIndicatorVisible

由于shared在App Extensions中不可用,是否有一种方法可以使用#available这样的内容,这样我就不必复制此类了一行代码? (我可以删除活动指示器,但我不愿意,因为我想让用户知道网络呼叫何时发生)

我已经尝试添加一个预编译的宏,正如我在另一个问题上找到的答案所建议的那样,但编译仍然抱怨。

1 个答案:

答案 0 :(得分:0)

使用依赖注入模式根据UIApplication.shared重构代码。

  1. 使用协议来描述UIApplication.shared当前提供的功能。

  2. 为基本应用实施该协议,UIApplication.shared可用,并在那里使用。在不使用UIApplication.shared的情况下实施其他实施,这将用于应用扩展程序。

  3. 重构当前类以使用实现对象的协议并在初始化时注入正确的实现(依赖注入模式) - 该类的初始化程序将接受协议实现。

  4. 在创建重构类的实例时连接正确的实现 - 在应用扩展程序中将实现传递给UIApplication.shared,而在基础应用程序中传递UIApplication.shared