在自定义单元格中使用 UISwitch 设置对象属性

Set object properties using a UISwitch in a custom cell

我正在尝试做一些应该非常简单的事情,但是由于我对Swift缺乏经验,我遇到了一些问题。

我有一个 ViewController,其中有一个 TableView,其中包含从对象数组(称为 allListItems)填充的自定义单元格。这些对象是使用 Realm Model Object 创建的,我正在使用它而不是 Core Data,我认为这可能是相关的。每个自定义单元格中都有一个 UISwitch,理想情况下我想对其进行设置,以便当用户切换 UISwitch 时,它会修改布尔值 isSelected 属性对于那个 indexPath.row,然后将该对象附加到一个单独的数组,称为 selectedListItems.

我对 SO、Tuts+ 和 AppCoda 的所有搜索都表明我应该在这里使用协议 - 委托模式,我的协议在我的自定义单元格 class 中,我的委托在我的 ViewController class。在一天的大部分时间里,我都没有运气,但是,我认为这可能是由于数组是领域模型对象。

正如我所提到的,我对 Swift 和一般编程还很陌生,因此非常感谢 ELI5 的回复!提前致谢!

作为参考,这是我的自定义单元格:

import UIKit

class AllListItemsTableViewCell: UITableViewCell {

    @IBOutlet var toggleIsSelected: UISwitch!
    @IBOutlet var listItemLabel: UILabel!

  override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
}

不要使用建议的协议/委托模式,而是使用回调。
这在 Swift.

中非常容易

在 table 视图单元格中声明一个带闭包的可选变量

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

并在 IBAction 中为开关调用它

@IBAction func switchChanged(sender : UISwitch) {
    callback?(self, sender.on)
}

cellForRowAtIndexPath设置回调

cell.callback = { (tableViewCell, switchState) in
  if let indexPath = self.tableView.indexPathForCell(tableViewCell) {
    // do something with index path and switch state
  }
}

如果同时移动了单元格以获得最新的索引路径,则传回单元格可能很有用。