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

Swift 如何在VIPER结构中使用委托传输数据,swift,delegates,viper,Swift,Delegates,Viper,我有两个页面,第一页是loginPage,另一页是MainViewPage,我想将userInfo(用户名和密码)从第一页传输到第二页,我使用VIPER结构,我已经在第二页中获得了userInfo,但是当我在第二页中使用Presenter函数更新UILabel时,进度被中断,它显示线程1:致命错误:在展开可选值时意外发现nil import Foundation import UIKit class MainViewModuleView: UIViewController, MainViewM

我有两个页面,第一页是loginPage,另一页是MainViewPage,我想将userInfo(用户名和密码)从第一页传输到第二页,我使用VIPER结构,我已经在第二页中获得了userInfo,但是当我在第二页中使用Presenter函数更新UILabel时,进度被中断,它显示线程1:致命错误:在展开可选值时意外发现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中此演示的代码:

我认为这是一个MainViewModuleView未从情节提要加载/实例化的情况


不久之后,它似乎失去了与故事板的连接。

您的标签在分配期间未初始化。我认为您的方法是在
viewDidLoad
之前被调用的