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
}
}