我有一个进行网络通话的课程。我希望能够在主应用程序和App扩展中使用此类。但是,在本课程中,我使用:UIApplication.shared.isNetworkActivityIndicatorVisible
。
由于shared
在App Extensions中不可用,是否有一种方法可以使用#available
这样的内容,这样我就不必复制此类了一行代码? (我可以删除活动指示器,但我不愿意,因为我想让用户知道网络呼叫何时发生)
我已经尝试添加一个预编译的宏,正如我在另一个问题上找到的答案所建议的那样,但编译仍然抱怨。
答案 0 :(得分:0)
使用依赖注入模式根据UIApplication.shared
重构代码。
使用协议来描述UIApplication.shared
当前提供的功能。
为基本应用实施该协议,UIApplication.shared
可用,并在那里使用。在不使用UIApplication.shared
的情况下实施其他实施,这将用于应用扩展程序。
重构当前类以使用实现对象的协议并在初始化时注入正确的实现(依赖注入模式) - 该类的初始化程序将接受协议实现。
在创建重构类的实例时连接正确的实现 - 在应用扩展程序中将实现传递给UIApplication.shared
,而在基础应用程序中传递UIApplication.shared
。