如何使用VIPER结构中的委托传输数据

时间:2018-03-16 07:45:33

标签: swift delegates viper

我有两个页面,第一页是loginPage,另一个是MainViewPage,我想将userInfo(UserName和Password)从第一页转到第二页,我使用的是VIPER结构,我已经在第二页获得了userInfo,但是当我使用Presenter函数在SecondPage中更新UILabel,进度被破坏,它显示了线程1:致命错误:在展开Optional值时意外发现nil。

import Foundation
import UIKit

class MainViewModuleView: UIViewController, MainViewModuleViewProtocol
{

    var presenter: MainViewModulePresenterProtocol?


    @IBOutlet weak var userInfo: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()
//        print(NSHomeDirectory()as NSString)
    }

    func updateLabel(text:String){
        print(text)
        userInfo.text = text
    }
}

这是我的演示者:

import Foundation

class MainViewModulePresenter: MainViewModulePresenterProtocol, MainViewModuleInteractorOutputProtocol
{

    weak var view: MainViewModuleViewProtocol?
    var interactor: MainViewModuleInteractorInputProtocol?
    var wireFrame: MainViewModuleWireFrameProtocol?
    var delegate: MainModuleDelegate?

    init() {}    
}



extension MainViewModulePresenter: MainModuleDelegate{

    func sendLoginUser(userName: String) {
        print("MainViewModulePresenter?.sendLoginUser: " + userName)
        let text = userName
        view?.updateLabel(text: text)
    }

}

Presenter和MainView中的文本都有值,但是当它调用updateLabel函数时,进度被破坏了。 GitHub中的这个演示代码:https://github.com/paboo199148/VIPERDemo

2 个答案:

答案 0 :(得分:1)

我认为不是从故事板加载/实例化MainViewModuleView的情况。

之后不久它似乎失去了与故事板的联系。

答案 1 :(得分:0)

您的标签在分配过程中未初始化。我认为您的方法在viewDidLoad之前被调用。