提问者:小点点

属性观察器中的oldValue值在Swift中始终相同


嗨,我有collectionView,在我的自定义单元格中有一个radioButton。我在我的集合视图的cellforAt函数中分配了cell.radioButton.tag=indexPath.Row。然后,我创建了一个属性观察器,如下所示。我点击了不同的数据,但是oldValue用相同的值打印。(你可以在照片中看到我点击了shooter和strategy。)

    var selectedIndex: Int = 0 {
    
    didSet {
        
        print("old \(oldValue), current \(selectedIndex)")
    }
}

@IBAction func tappedRadioButton(_ sender: UIButton) {

    self.selectedIndex = sender.tag
}


共1个答案

匿名用户

您在单元格本身中添加了selectedIndex,因此每个单元格都在创建自己的初始值为0的对象,这是错误的。您需要将该属性添加到viewController本身,并通过委托或闭包更改它

//add this closure to your cell
var didTapRadioButton: (() -> Void)?

//call this closure in the @IBAction for the radio button
@IBAction....{
    didTapRadioButton?()
}

//from ViewController cellforRow(at IndexPath..
cell.didTapRadioButton = { 
    self.selectedIndex = indexPath.row
}