Ios 为什么我的模型没有更新?
首先,我有一个结构。这是我的模型Ios 为什么我的模型没有更新?,ios,oop,swift,model-view-controller,segue,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 UIV
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。它们不会打印我在滑块中更改的值。但是,打印语句都可以工作,因此滑块工作正常 啊,结构和类之间有趣的区别。结构按值传递-在每次赋值时创建一个完整副本 另一方面,课程是通过引用传递的——作业上没有副本 在您的情况下,这两个令人不安的任务工作正常,但仅在本地进行,从未影响您的控制器
使用类进行发现设置并查看差异。注意:如果需要使用结构,则必须通过回调闭包传递新值,以便控制器可以分配,从而将编辑的模型复制到自己的副本中。我将其切换为类,但它仍然显示初始值。在创建模型时,我也将let切换到var。如果在两个赋值处设置断点,那么dsettings为nil吗?我解决了这个问题。结果发现我的识别码都没有设置。