如何在 Swift 中将变量传递回父级

How to pass a variable back to parent in Swift

我有一个 vc 将数组传递给第二个 vc。第二个 vc 更改数组,并且必须在关闭时将修改后的数组传递给第一个 vc。

把数组从第一个传到第二个,我做到了

        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        let vc : MedicacaoPopUp = storyboard.instantiateViewControllerWithIdentifier("MedicacaoPopUp") as! MedicacaoPopUp

        vc.nomeAlunoP = nomeAluno.text!
        vc.turmaAlunoP = turmaAluno.text!
        vc.medicacao = medicacao

        vc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext

        self.presentViewController(vc, animated: true, completion: nil)

将修改后的数组传回第一个vc不能

a) 我在第一个 vc 文件中创建了协议,删除并创建了 func 来随机获取数组的值

protocol MedicacaoAddDelegate: class {
    func receiveRemedios(rMedicacao: [AnyObject])
}

class MedicacaoAdd: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, MedicacaoAddDelegate {

    var medicacao = [AnyObject]()

    func receiveRemedios(rMedicacao: [AnyObject]) {

        print("dentro do receiveRemedios")
        medicacao = rMedicacao
        trataCesto()
    }

b) 在第二个 vc 中,我创建了变量 "delegate" 并在按下按钮时调用函数

class MedicacaoPopUp: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableview: UITableView!

    weak var delegate: MedicacaoAddDelegate?

    var nomeAlunoP = ""
    var turmaAlunoP = ""
    var medicacao = [AnyObject]()

    override func viewDidLoad() {

        self.tableview.delegate = self
        self.tableview.dataSource = self

    }

    @IBAction func btnDismiss(sender: UIButton) {
        self.delegate?.receiveRemedios(medicacao)
        self.dismissViewControllerAnimated(true, completion: nil)
    }

我真的不知道我做错了什么。我已经尝试了我在 Whosebug 上找到的所有替代方案,但没有任何效果。

您似乎忘记设置所呈现的委托VC。

let vc : MedicacaoPopUp = storyboard.instantiateViewControllerWithIdentifier("MedicacaoPopUp") as! MedicacaoPopUp

添加

vc.delegate = self

确实是一个结构良好的代码。使用协议和委托作为从弹出窗口返回数据的回调是个好主意。

只有一件事...这是哪里

vc.delegate = self

在第一个代码片段中?