(Swift)使用回调函数将数据传递到另一个viewController

(Swift)使用回调函数将数据传递到另一个viewController,swift,uitableview,callback,closures,swift5,Swift,Uitableview,Callback,Closures,Swift5,情况: 我有一个包含许多单元格的tableView。每个单元格都有相同的类型/类别,每个单元格都有一个切换开关。 切换开关时,其中一个单元格,或者更准确地说是第2节第0行中的单元格,需要将bool类型的变量更新为true/false(如果开关打开=>true)。该变量位于第二个VC中。 使用下面的代码,无论点击哪个单元格,它都会打印开关打开/开关关闭,但我只需要上面提到的单元格 单元格的类别: @IBOutlet weak var labelCell: UILabel! @IBOutlet

情况:
我有一个包含许多单元格的tableView。每个单元格都有相同的类型/类别,每个单元格都有一个切换开关。
切换开关时,其中一个单元格,或者更准确地说是第2节第0行中的单元格,需要将bool类型的变量更新为true/false(如果开关打开=>true)。该变量位于第二个VC中。
使用下面的代码,无论点击哪个单元格,它都会打印
开关打开/开关关闭
,但我只需要上面提到的单元格
单元格的类别:

@IBOutlet weak var labelCell: UILabel!

@IBOutlet weak var cellSwitch: UISwitch!

@IBAction func toggleSwitch(_ sender: Any) {
    if cellSwitch.isOn == true {
        print("switch is on")
    }
    else {
        print("switch is off")
    }
}
在cellForRowAt中:

case (2,0):
        cell.labelCell.text = "Shuffled"
        let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        let cardVC = (mainStoryboard.instantiateViewController(withIdentifier: "CardViewController") as! CardViewController)
        //place for condition, if switch is on/off, put the true/false to secondVC.shuffle
        cardVC.shuffle = true

我的问题是我的回调函数应该是什么样子,我没有使用它们的经验。如何检查这个(2,0)单元格是否被点击?

将这个回调函数声明到tableViewCell文件中,如下所示

var callback:((Bool) -> Void)?

@IBAction func toggleSwitch(_ sender: Any) {
    if cellSwitch.isOn == true {
        print("switch is on")
        callback?(true)
    }
    else {
        print("switch is off")
        callback?(false)
    }
}


您可以使用UITableViewDelegatedidSelectRowAt方法获得行点击

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
if indexPath.section == 2 {
    if indexPath.row == 0 {
        // the tapped detect of (2,0)
    }
}
}

您还可以通过类似show bellow的cellForRowAt方法获得UISwitch的回调点击操作

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   if indexPath.section == 2 {
      var cell = tableView.dequeueReusableCell(withIdentifier: "yourCell") as! YourCell
      if indexPath.row == 0 {
          //here you can write your callBack closure & your UISwitch's value will retrived here
          cell.callback = { [unowned self] check in
              cardVC.shuffle = check

          }
      }
   }
}

您何时展示您的
CardViewController
?在didSelectRowAt?不,在按钮上点击。按钮位于TableView下。您可以通过通知或委托模式解决此问题,或者将数据放入全局变量(单一真相来源)中,所有其他变量都从该变量获取数据。您为此尝试过协议和委托吗?没有,从未对其做过任何处理。如果我找不到解决办法,我会试试。