Swift - 如何在从Storyboard创建的View Controller中实现依赖注入,并且应该从网络中获取应该注入的数据(在异步调用之后可用)?
例如,View Controller显示一个列表。为了获取列表的数据集,应该执行网络调用,然后将数据注入dataSet属性。
如何实现这一目标?
答案 0 :(得分:0)
我不确定是否有你的问题,但这是我通常做的。假设您有一个班级DataFetcher
,负责拨打网络电话:
class DataFetcher {
func fetchData(completion: @escaping ([String]) -> Void) {
// Code to fetch the data
}
}
在视图控制器中,保持对DataFetcher
类型的引用,并通过使用静态方法实例化ViewController使其可注入:
class MyViewController: UIViewController {
private static let identifier = "MyViewController"
var fetcher: DataFetcher?
static func newInstance(fetcher: DataFetcher) -> MyViewController {
let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: identifier) as! MyViewController
controller.fetcher = fetcher
return controller
}
override func viewDidLoad() {
super.viewDidLoad()
fetchData()
}
private func fetchData() {
fetcher?.fetchData { [weak self] data in
// Reaload data of tableView, CollectionView, etc
}
}
}
然后,每当您想要呈现ViewController时,请调用newInstance
方法:
let fetcher = DataFetcher()
let controller = MyViewController.newInstance(fetcher: fetcher) // Injecting
present(controller, animated: true, completion: nil)