为什么我的模型没有更新?

时间:2015-04-05 08:51:44

标签: ios oop swift model-view-controller segue

首先,我有一个结构。这是我的模特

struct DiscoverySettings {
    var alert:Bool
    var distance:Int
    var minAge: Int
    var maxAge: Int
    private init(){
        alert = true
        distance = 50
        minAge = 18
        maxAge = 100
    }
}

extension UIViewController{
    var contentViewController: UIViewController{
        if let navcon = self as? UINavigationController{
            return navcon.visibleViewController
        }else{
            return self
        }
    }
}

// View Controller 1
class SettingsViewController: UIViewController {
    let discovery_model = DiscoverySettings()
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == Constants.EditDiscoverSegue {
            if let dseg = segue.destinationViewController.contentViewController as? DiscoverySettingsViewController {
                dseg.dsettings = discovery_model
            }
        }
    }
    @IBAction func unwindToSettings(segue:UIStoryboardSegue){
        println(discovery_model.minAge)
        println(discovery_model.maxAge)
    }
...

//View Controller 2
class DiscoverySettingsViewController: UIViewController  {

    var dsettings: DiscoverySettings? {
        didSet{
            render()
        }
    }

    func rangeSliderValueChanged(rangeSlider: RangeSlider) {
        println("Range slider value changed: (\(Int(rangeSlider.lowerValue)) , \(Int(rangeSlider.upperValue)))")
        var low = Int(rangeSlider.lowerValue)
        var high = Int(rangeSlider.upperValue)
        dsettings?.minAge = low //this does not set the original model!
        dsettings?.maxAge = high //this does not set the original model!
    }
...

当我拖动滑块然后单击“保存”以展开到原点时,我打印出最大年龄和最小年龄。但是,它们打印18和100.它们不打印我在滑块中更改的值。 (但是,打印语句都有效,因此滑块工作正常)。

1 个答案:

答案 0 :(得分:0)

啊,结构和类之间的有趣区别。结构按值传递 - 每次分配时都会创建一个完整的副本。

另一方面,类通过引用传递 - 没有在赋值上进行复制。

在你的情况下,两个令人不安的任务工作正常,但只在本地,从未影响你的控制器。

class用于DiscoverySettings并查看差异。