首先,我有一个结构。这是我的模特
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.它们不打印我在滑块中更改的值。 (但是,打印语句都有效,因此滑块工作正常)。
答案 0 :(得分:0)
啊,结构和类之间的有趣区别。结构按值传递 - 每次分配时都会创建一个完整的副本。
另一方面,类通过引用传递 - 没有在赋值上进行复制。
在你的情况下,两个令人不安的任务工作正常,但只在本地,从未影响你的控制器。
将class
用于DiscoverySettings
并查看差异。