![](/img/trans.png)
[英]Why does CGFloat casted from Float not exhibit CGFloat behavior?
[英]Why does CGFloat.zero exist?
通用算法建立在协议之上,让我们可以编写适用于多种类型的通用代码。 AdditiveArithmetic协议要求符合类型具有零值 ( .zero
),可用于需要该值的算法。 有了它,您就可以编写一个可以处理多种不同类型整数(Int16、Int32、Int...)、浮点数(Double、Float、CGFloat...)甚至向量的函数。 任何具有算术零、“加法和减法”的概念并且可以等式(因为 AdditiveArithmetic 需要 Equatable)的东西都可以参与。
AdditiveArithmetic 不要求类型符合 ExpressibleByIntegerLiteral,这意味着可能无法使用0
符号创建类型。 向量类型通常不会以这种方式初始化,但仍然具有“零值”。
作为如何使用它的示例,请考虑sum()
,它可以处理整数、浮点数、向量或任何您想要符合 AdditiveArithmetic 的自定义类型:
extension Sequence where Element: AdditiveArithmetic {
func sum() -> Element {
reduce(.zero, +)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.