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

时间:2015-04-05 16:15:52

标签: 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 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()中进行初始设置的地方:

@IBOutlet weak var distanceSlider: UISlider!
@IBOutlet weak var alertSwitch: UISwitch!

var dsettings: DiscoverySettings? {
    didSet{
        updateUI()
    }
}

let ageSlider = RangeSlider(frame: CGRectZero)

override func viewDidLoad() {
    super.viewDidLoad()
}

func updateUI(){
    self.distanceSlider.value = Float(dsettings?.distance) //error
    self.alertSwitch = dsettings?.alert //error
}

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

我不确定为什么会发生这些错误,因为我在班上将类型定义为相同。

2 个答案:

答案 0 :(得分:2)

请尝试以下代码:

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

答案 1 :(得分:0)

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

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

  

“致命错误:在打开Optional时意外发现nil   值“

因为此时视图仍为零,并且您自动展开属性定义中的可选项,因为您使用“!”。

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

2.a:你需要做的事情是“如果让dsettings”,那就是Float()不接受一个可选项,并且使用if if使得在if范围内dsettings不再是可选的。