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

How come my model is not updating?

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

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!
    }
...

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

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

另一方面,

类 是通过引用传递的——没有对赋值进行复制。

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

DiscoverySettings 使用 class 并查看差异。