Swift - 如何在从 Storyboard 创建的 View Controller 中实现依赖注入(inject),并且应该注入(inject)的数据是从网络中获取的(将在异步调用后可用)?
例如,View Controller 显示一个列表。为了获取列表的数据集,应该执行网络调用,然后将数据注入(inject) dataSet 属性。
如何实现?
最佳答案
我不确定是否完全理解您的问题,但这是我通常的做法。假设您有一个 DataFetcher
类,负责进行网络调用:
class DataFetcher {
func fetchData(completion: @escaping ([String]) -> Void) {
// Code to fetch the data
}
}
在你的 View Controller 中,保存对 DataFetcher
类型的引用,并通过静态方法实例化 ViewController 使其可注入(inject):
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)
关于ios - Swift - 通过网络调用和 Storyboard 在 View Controller 中进行依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49597643/