Swift-通过网络呼叫和故事板的视图控制器的依赖注入



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)

最新更新