鉴于:
let a = 4.2
let b = -1.3
let c = 6.4
我想知道将这些值限制在给定范围内的最简单,最快捷的方法0...5
,例如:
a -> 4.2
b -> 0
c -> 5
我知道我可以执行以下操作:
let clamped = min(max(a, 0), 5)
或类似的东西:
let clamped = (a < 0) ? 0 : ((a > 5) ? 5 : a)
但是我想知道在Swift中是否还有其他方法可以做到这一点-
特别是,我想知道(并在SO上进行文档记录,因为在Swift中似乎没有关于夹紧数字的问题)中是否包含任何内容。 Swift标准库专门用于此目的。
可能没有,如果是的话,那也是我很乐意接受的答案。:)
该ClosedInterval类型已经有一个
func clamp(_ intervalToClamp: ClosedInterval<Bound>) -> ClosedInterval<Bound>
以另一个 间隔 作为参数的方法。Swift Evolution邮件列表上有一个建议
添加另一种将 单个值 钳位到给定间隔的方法:
/// Returns `value` clamped to `self`.
func clamp(value: Bound) -> Bound
而这正是您所需要的。
使用现有clamp()
方法的实现在
例如,此附加clamp()
方法可以实现为
extension ClosedInterval {
func clamp(value : Bound) -> Bound {
return self.start > value ? self.start
: self.end < value ? self.end
: value
}
}
例:
(0.0 ... 5.0).clamp(4.2) // 4.2
(0.0 ... 5.0).clamp(-1.3) // 0.0
(0.0 ... 5.0).clamp(6.4) // 5.0
ClosedInterval
是 通用 类型
public struct ClosedInterval<Bound : Comparable> { ... }
因此,该工程不仅为Double
但这些都是类型Comparable
(如Int
,CGFloat
,String
,…):
(1 ... 3).clamp(10) // 3
("a" ... "z").clamp("ä") // "ä"
Swift 3(Xcode 8)的 更新
:ClosedInterval
已重命名为ClosedRange
,其属性lower/upperBound
现在为:
extension ClosedRange {
func clamp(_ value : Bound) -> Bound {
return self.lowerBound > value ? self.lowerBound
: self.upperBound < value ? self.upperBound
: value
}
}
问题内容: 我试图在仅Swift代码中计算两个CLLocation点之间的方位角。我遇到了一些困难,并假设这是一个非常简单的功能。堆栈溢出似乎没有列出任何内容。 我的ltan2调用关于左值cgfloat或其他错误… 问题答案: 这是一个Objective-C解决方案 您的代码对我来说似乎不错。没事的没错。您没有指定结果有多远,但是您可以尝试将弧度/度转换器转换为: 如果得到负方位角,2*M_PI则
问题内容: 如何在Swift中将用户的TextField输入限制为数字? 问题答案: 您可以使用的方法将用户的输入限制为数字: 为Swift 3更新:
我的应用程序包含5个ViewControllers的TabBar控制器可以单击每个viewcontrollers中的一个按钮,该按钮将弹出另一个视图,用户可以在其中选择一个设置。按钮(被点击)应该根据每个ViewController中选择的设置来改变其背景。因此,如果用户点击VC1中的按钮并选择设置,该信息应该传播到所有其他VC中,以便按钮具有相同的背景。 我正在使用故事板,我知道这很容易在2VC
问题内容: 我想在两个小十进制数字之间获取一个随机数。 在0.8到1.3之间。 要么 谢谢! 问题答案: 斯威夫特5: 使用random(in :) 返回指定范围内的随机值: 每个苹果: random()静态方法从范围内的连续均匀分布中选择一个随机值,然后将该值转换为该类型中最接近的可表示值。 请参阅random(in:using:)以指定默认值以外的随机生成器。
问题内容: 在JavaScript中,如果窗口大小大于500px,我要告诉浏览器执行某些操作。我这样做是这样的: 这很好用,但是我想使用相同的方法,但是要有一定范围的数字。因此,如果窗口大小在500像素到600像素之间,我想告诉我的浏览器来做一些事情。我知道这行不通,但是这是我的想象: 在JavaScript中甚至可能吗? 问题答案: 测试是否大于或小于表示值或值本身均不会导致条件变为真。
我正在尝试解决此问题: 一位物理教授给班上的学生做项目。学生们必须组成一个两人小组来做这个项目。教授让学生来决定队伍。一个班级的学生人数将是偶数。 每个学生都有自己的知识水平。它告诉每个学生有多少知识。一个团队的知识水平是两个学生知识水平的总和。 学生们决定组成小组,这样知识最高的团队和知识最低的团队之间的差异就最小了。 投入 输入的第一行将包含测试用例的数量t;在接下来的t行中,第一个数字是n,