Ios 如何设置UISlider和UISwitch的初始值?

Ios 如何设置UISlider和UISwitch的初始值?,ios,oop,swift,Ios,Oop,Swift,我有一门课: class DiscoverySettings { var alert:Bool var distance:Int var minAge: Int var maxAge: Int private init(){ alert = true distance = 50 minAge = 18 maxAge = 25 } } 在另一个控制器中,我执行以下操作: var dis

我有一门课:

class DiscoverySettings {
    var alert:Bool
    var distance:Int
    var minAge: Int
    var maxAge: Int
    private init(){
        alert = true
        distance = 50
        minAge = 18
        maxAge = 25
    }
}
在另一个控制器中,我执行以下操作:

var 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
            }
        }
    }
这是我在updateUI()中进行初始设置的地方:

我在设置值的行中遇到错误,如“找不到接受提供参数的init的重载”和“找不到重载NSNumber不是UISwitch的子类型”

我不确定为什么会发生这些错误,因为我在类中定义了相同的类型。

请尝试以下代码:

func updateUI(){
    if let dsettings = dsettings {
        self.distanceSlider?.value = Float(dsettings.distance)
        self.alertSwitch?.on = dsettings.alert
    }
}

我发现您提供的代码存在两个问题:

1.:在prepareForSegue上,当您设置contentViewController的settings属性时,segue的目标视图控制器的视图尚未加载,您正在didSet上调用updateUI。这就是导致错误的原因:

“致命错误:在展开可选文件时意外发现零。” “价值”

因为此时视图仍然为零,并且由于使用了“!”而自动展开属性定义上的可选视图

您应该将对updateUI()的调用移动到viewDidLoad,或者必须检查是否已经创建了视图


2.a:需要执行“if-let-dsettings”的原因是Float()不接受可选设置,而使用if-let使其在if范围内不再是可选设置。

我设置值的那两行。为什么需要“if-let-dsettings”?奇怪的如果我删除它,它将不起作用。有关您问题的答案,请在swift中签出可选绑定和可选绑定。语言中最好的特性之一。如果答案对你有效,也请接受。谢谢。当我运行它时,我还得到了“致命错误:在展开可选值时意外地发现了nil”。但是,它编译得很好。让我们来看看。
func updateUI(){
    if let dsettings = dsettings {
        self.distanceSlider?.value = Float(dsettings.distance)
        self.alertSwitch?.on = dsettings.alert
    }
}