2015-04-05 33 views
0

我有一个类:如何设置我的UISlider和UISwitch的初始值?

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

试试下面的代码:

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

仍然收到相同的错误 – TIMEX 2015-04-05 16:22:51

+0

您在哪一行收到错误? – Abdullah 2015-04-05 16:25:12

+0

这两行我设置的值。 – TIMEX 2015-04-05 16:26:11

0

我看到两个问题,你给出的代码:

1:在prepareForSegue,当你设置contentViewController的设置属性时,赛格瑞的目的地视图控制器的看法尚未加载,您在didSet上调用updateUI。这是你错误的原因:

"fatal error: unexpectedly found nil while unwrapping an Optional value"

因为意见仍然无在这一点上,你会自动展开的属性定义可选的,因为你用“!”。

你应该调用转到updateUI()移动到viewDidLoad中或你必须检查的意见已经创建

2.A:你需要做的,“如果让DSETTINGS”的原因是,浮动()不要接受一个可选的使用,如果让让它在如果范围dsettings不再是可选的。