我使用一个UISlider来允许用户在四个选项中进行选择。我问用户一个"你有多喜欢这个东西?"的问题,他们通过移动滑块来回应,然后在幕后,我将滑块的值映射到一个数组的四个元素之一。我希望滑块的第一个四分之一对应于数组的第一个元素,滑块的第二个四分之一对应于数组的第二个元素,以此类推。
默认情况下,滑动条的范围是[0,1],所以我想要做的一种自然的方法是:
let index = Int(rangedSlider.value * Float(currentAnswers.count) )
假设rangedSlider是连接到有问题的UISlider的出口的名称,currentAnswers是我要映射到的答案数组。这样做的问题是,如果用户将滑块一直向右移动,则会将滑块的值设置为1,根据上面的公式(假设有四个答案)将其映射到索引4。我总是可以添加额外的代码行来单独处理这种情况,
if rangedSlider.value == 1 { index = currentAnswers.count - 1 }
但我更喜欢一行的解决方案。
我也可以在故事板中设置滑动条的最大值为0.99,并坚持我写的第一行代码,但我想知道:是否有一种内置的方法来使滑动条值的范围开放间隔?有没有更好的方法来得到我想要的行为?
这比:
let index = Int(rangedSlider.value * Float(currentAnswers.count - 1))
还是我误解了你的问题?这样,你的索引将作为0到3之间的数字返回,其中0对应第一个答案,3对应第四个答案。