使用闭包将变量信息传递给 First VC 时出现问题

Trouble Passing Variable Info to First VC Using Closure

我正在尝试将用户在我的 ShipViewController 中选择的名称的数据传递到我的 ProfileViewController。我尝试使用闭包来这样做,但是 ProfileViewController 中的按钮标题(向 ShipViewController 显示模态弹出框)没有更改为用户在 ShipViewController 中选择的名称。

不应该是 String --> () 还是我实例化视图控制器的方式不正确?

(ShipViewController)

var completionHandler:((String) -> ())?

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "shipCell", for: indexPath) as! ShipViewCell

    if selectedIndex == indexPath.row {
        let result = completionHandler?(shipNames[selectedIndex!])
        self.dismiss(animated: true, completion: nil)
    }
}

(In viewDidLoad of ProfileViewController)
        let vc = storyboard?.instantiateViewController(withIdentifier: "ShipViewController") as! ShipViewController
    vc.completionHandler = { (text) -> ()in
        print(text)
        self.shipButton.setTitle(text, for: .normal)
    }

didSelectItemAt

中关闭 ShipViewController
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let result = completionHandler?(shipNames[indexPath.item])
        self.dismiss(animated: true, completion: nil)
}

ProfileViewController中不要赋值给viewDidLoad

中的completionHandler

分配给 prepare for segue

中的完成处理程序
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showShip" {
        if let vc = segue.destination as? ShipViewController {
             vc.completionHandler = { (text) -> ()in
                  print(text)
                  self.shipButton.setTitle(text, for: .normal)
             }
        }
    }
}