Swinject我在做什么错?

问题描述 投票:0回答:2

[每当我运行此代码时,都会调用VCModel的init(),但Swinject不会将VCModel实例注入到我的ViewController中。有人可以告诉我我做错了什么吗?我得到的错误是:

意外地发现nil,而在ViewController viewModel.cellModels

AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    container = Container() { con in
        con.register(VCModeling.self) { _ in
            VCModel()
        }

        con.storyboardInitCompleted(ViewController.self) { r, c in
            c.viewModel = r.resolve(VCModeling.self)!
        }
    }

    let window = UIWindow(frame: UIScreen.main.bounds)
    window.backgroundColor = UIColor.white
    window.makeKeyAndVisible()
    self.window = window
    let bundle = Bundle(for: ViewController.self)
    let storyboard = SwinjectStoryboard.create(name: "Main", bundle: bundle, container: container)
    window.rootViewController = storyboard.instantiateInitialViewController()

    return true
}

ViewController

private let disposeBag = DisposeBag()
var viewModel: VCModeling!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    viewModel.cellModels
     .bind(to: tableView.rx.items(cellIdentifier: "myCell", cellType: MyCellClass.self)) {
         i, cellModel, cell in
       cell.viewModel = cellModel
     }.disposed(by: disposeBag)
}
ios swift rx-swift swinject
2个回答
0
投票

您可以在AppDelegate.swift中尝试以下代码吗?>

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        container = Container() { con in
            con.register(VCModeling.self) { _ in
                VCModel()
            }

            con.storyboardInitCompleted(ViewController.self) { r, c in
                c.viewModel = r.resolve(VCModeling.self)!

                let window = UIWindow(frame: UIScreen.main.bounds)
                window.backgroundColor = UIColor.white
                window.makeKeyAndVisible()
                self.window = window
                window.rootViewController = c
            }
        }
        return true
    }

0
投票

AppDelegate中的代码→application:didFinishLaunchingWithOptions方法似乎正常工作。我已经用以下代码验证了它:

© www.soinside.com 2019 - 2024. All rights reserved.