为什么我的模型没有更新?
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
并查看差异。
首先,我有一个结构。这是我的模型
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
并查看差异。