swift-如何在情节板中创建的视图控制器中实现依赖项注入,并从网络中获取了应该注入的数据(在异步调用后可用(?/p>
例如,查看控制器显示列表。为了获取列表的数据集,应执行网络调用,然后将数据注入数据集属性。
如何实现?
我不确定是否有您的问题,但这是我通常这样做的。假设您有一个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)